1//************************************ bs::framework - Copyright 2018 Marko Pintera **************************************//
2//*********** Licensed under the MIT license. See LICENSE.md for full terms. This notice is not to be removed. ***********//
3#pragma once
4
5#include "BsPrerequisites.h"
6#include "BsCoreApplication.h"
7#include "Utility/BsEvent.h"
8
9namespace bs
10{
11 /** @addtogroup Application-Engine
12 * @{
13 */
14
15 /** Primary entry point for the framework. Handles startup and shutdown. */
16 class BS_EXPORT Application : public CoreApplication
17 {
18 private:
19 /**
20 * Builds the start-up descriptor structure, filling out the provided parameters and using the default values
21 * for the rest.
22 */
23 static START_UP_DESC buildStartUpDesc(VideoMode videoMode, const String& title, bool fullscreen);
24 public:
25 Application(const START_UP_DESC& desc);
26 virtual ~Application();
27
28 /** Starts the framework. If using a custom Application system, provide it as a template parameter. */
29 template<class T = Application>
30 static void startUp(VideoMode videoMode, const String& title, bool fullscreen)
31 {
32 START_UP_DESC desc = buildStartUpDesc(videoMode, title, fullscreen);
33 CoreApplication::startUp<T>(desc);
34 }
35
36 /** Starts the framework. If using a custom Application system, provide it as a template parameter. */
37 template<class T = Application>
38 static void startUp(const START_UP_DESC& desc)
39 {
40 CoreApplication::startUp<T>(desc);
41 }
42
43 /**
44 * Shows the profiler overlay.
45 *
46 * @param[in] type Type of information to display on the overlay.
47 * @param[in] camera Camera to show the overlay on. If none the overlay will be shown on the main camera.
48 */
49 void showProfilerOverlay(ProfilerOverlayType type, const SPtr<Camera>& camera = nullptr);
50
51 /** Hides the profiler overlay. */
52 void hideProfilerOverlay();
53
54 protected:
55 /** @copydoc Module::onStartUp */
56 void onStartUp() override;
57
58 /** @copydoc Module::onShutDown */
59 void onShutDown() override;
60
61 /** @copydoc CoreApplication::preUpdate */
62 void preUpdate() override;
63
64 /** @copydoc CoreApplication::postUpdate */
65 void postUpdate() override;
66
67 /** @copydoc CoreApplication::startUpRenderer */
68 void startUpRenderer() override;
69
70 /** Initializes the script manager. */
71 virtual void startUpScriptManager();
72
73 /** Calls per-frame update on the script manager. */
74 virtual void updateScriptManager();
75
76 /** @copydoc CoreApplication::getShaderIncludeHandler */
77 SPtr<IShaderIncludeHandler> getShaderIncludeHandler() const override;
78
79 SPtr<ProfilerOverlay> mProfilerOverlay;
80 };
81
82 /** Easy way to access Application. */
83 BS_EXPORT Application& gApplication();
84
85 /** @} */
86}