| 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 |  | 
|---|
| 9 | namespace 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 | } | 
|---|