BsApplication.cpp 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149
  1. #include "BsApplication.h"
  2. #include "BsGUIMaterialManager.h"
  3. #include "BsGUIManager.h"
  4. #include "BsOverlayManager.h"
  5. #include "BsDrawHelper2D.h"
  6. #include "BsDrawHelper3D.h"
  7. #include "BsBuiltinMaterialManager.h"
  8. #include "BsD3D9BuiltinMaterialFactory.h"
  9. #include "BsD3D11BuiltinMaterialFactory.h"
  10. #include "BsGLBuiltinMaterialFactory.h"
  11. #include "BsBuiltinResources.h"
  12. #include "BsScriptManager.h"
  13. #include "BsProfilingManager.h"
  14. #include "BsVirtualInput.h"
  15. #include "BsCursor.h"
  16. namespace BansheeEngine
  17. {
  18. START_UP_DESC createStartUpDesc(RENDER_WINDOW_DESC& primaryWindowDesc, const String& renderSystem, const String& renderer)
  19. {
  20. START_UP_DESC desc;
  21. desc.renderSystem = renderSystem;
  22. desc.renderer = renderer;
  23. desc.primaryWindowDesc = primaryWindowDesc;
  24. desc.input = "BansheeOISInput";
  25. desc.sceneManager = "BansheeSceneManager";
  26. desc.importers.push_back("BansheeFreeImgImporter");
  27. desc.importers.push_back("BansheeFBXImporter");
  28. desc.importers.push_back("BansheeFontImporter");
  29. return desc;
  30. }
  31. Application::Application(RENDER_WINDOW_DESC& primaryWindowDesc, RenderSystemPlugin renderSystem, RendererPlugin renderer)
  32. :CoreApplication(createStartUpDesc(primaryWindowDesc, getLibNameForRenderSystem(renderSystem), getLibNameForRenderer(renderer))),
  33. mMonoPlugin(nullptr), mSBansheeEnginePlugin(nullptr)
  34. {
  35. VirtualInput::startUp();
  36. ScriptManager::startUp();
  37. GUIManager::startUp();
  38. GUIMaterialManager::startUp();
  39. OverlayManager::startUp();
  40. BuiltinMaterialManager::startUp();
  41. BuiltinMaterialManager::instance().addFactory(bs_new<D3D9BuiltinMaterialFactory>());
  42. BuiltinMaterialManager::instance().addFactory(bs_new<D3D11BuiltinMaterialFactory>());
  43. BuiltinMaterialManager::instance().addFactory(bs_new<GLBuiltinMaterialFactory>());
  44. BuiltinMaterialManager::instance().setActive(getLibNameForRenderSystem(renderSystem));
  45. DrawHelper2D::startUp();
  46. DrawHelper3D::startUp();
  47. BuiltinResources::startUp();
  48. Cursor::startUp();
  49. #if BS_VER == BS_VER_DEV
  50. loadPlugin("BansheeMono", &mMonoPlugin);
  51. loadPlugin("SBansheeEngine", &mSBansheeEnginePlugin); // Scripting interface
  52. #endif
  53. }
  54. Application::~Application()
  55. {
  56. #if BS_VER == BS_VER_DEV
  57. unloadPlugin(mSBansheeEnginePlugin);
  58. unloadPlugin(mMonoPlugin);
  59. #endif
  60. Cursor::shutDown();
  61. BuiltinResources::shutDown();
  62. DrawHelper3D::shutDown();
  63. DrawHelper2D::shutDown();
  64. GUIMaterialManager::instance().forceReleaseAllMaterials();
  65. BuiltinMaterialManager::shutDown();
  66. OverlayManager::shutDown();
  67. GUIManager::shutDown();
  68. GUIMaterialManager::shutDown();
  69. ScriptManager::shutDown();
  70. VirtualInput::shutDown();
  71. }
  72. void Application::onStartUp()
  73. {
  74. CoreApplication::onStartUp();
  75. Cursor::instance().setCursor(CursorType::Arrow);
  76. }
  77. void Application::startUp(RENDER_WINDOW_DESC& primaryWindowDesc, RenderSystemPlugin renderSystem, RendererPlugin renderer)
  78. {
  79. CoreApplication::startUp<Application>(primaryWindowDesc, renderSystem, renderer);
  80. }
  81. void Application::update()
  82. {
  83. CoreApplication::update();
  84. VirtualInput::instance()._update();
  85. PROFILE_CALL(GUIManager::instance().update(), "GUI");
  86. }
  87. const ViewportPtr& Application::getPrimaryViewport() const
  88. {
  89. // TODO - Need a way to determine primary viewport!
  90. return nullptr;
  91. }
  92. const String& Application::getLibNameForRenderSystem(RenderSystemPlugin plugin)
  93. {
  94. static String DX11Name = "BansheeD3D11RenderSystem";
  95. static String DX9Name = "BansheeD3D9RenderSystem";
  96. static String OpenGLName = "BansheeGLRenderSystem";
  97. switch (plugin)
  98. {
  99. case RenderSystemPlugin::DX11:
  100. return DX11Name;
  101. case RenderSystemPlugin::DX9:
  102. return DX9Name;
  103. case RenderSystemPlugin::OpenGL:
  104. return OpenGLName;
  105. }
  106. return StringUtil::BLANK;
  107. }
  108. const String& Application::getLibNameForRenderer(RendererPlugin plugin)
  109. {
  110. static String DefaultName = "BansheeRenderer";
  111. switch (plugin)
  112. {
  113. case RendererPlugin::Default:
  114. return DefaultName;
  115. }
  116. return StringUtil::BLANK;
  117. }
  118. Application& gApplication()
  119. {
  120. return static_cast<Application&>(Application::instance());
  121. }
  122. }