BsApplication.cpp 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116
  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 "CmApplication.h"
  14. #include "CmProfiler.h"
  15. #include "BsVirtualInput.h"
  16. #include "BsCursor.h"
  17. namespace BansheeEngine
  18. {
  19. BsApplication::BsApplication()
  20. :mMonoPlugin(nullptr), mSBansheeEnginePlugin(nullptr)
  21. {
  22. }
  23. void BsApplication::startUp(RENDER_WINDOW_DESC& primaryWindowDesc, const String& renderSystem, const String& renderer)
  24. {
  25. START_UP_DESC desc;
  26. desc.renderSystem = renderSystem;
  27. desc.renderer= renderer;
  28. desc.primaryWindowDesc = primaryWindowDesc;
  29. desc.input = "CamelotOISInput";
  30. desc.sceneManager = "BansheeOctreeSM";
  31. desc.importers.push_back("CamelotFreeImgImporter");
  32. desc.importers.push_back("CamelotFBXImporter");
  33. desc.importers.push_back("CamelotFontImporter");
  34. gApplication().startUp(desc);
  35. VirtualInput::startUp(cm_new<VirtualInput>());
  36. ScriptManager::startUp(cm_new<ScriptManager>());
  37. GUIManager::startUp(cm_new<GUIManager>());
  38. GUIMaterialManager::startUp(cm_new<GUIMaterialManager>());
  39. OverlayManager::startUp(cm_new<OverlayManager>());
  40. BuiltinMaterialManager::startUp(cm_new<BuiltinMaterialManager>());
  41. BuiltinMaterialManager::instance().addFactory(cm_new<D3D9BuiltinMaterialFactory>());
  42. BuiltinMaterialManager::instance().addFactory(cm_new<D3D11BuiltinMaterialFactory>());
  43. BuiltinMaterialManager::instance().addFactory(cm_new<GLBuiltinMaterialFactory>());
  44. BuiltinMaterialManager::instance().setActive(desc.renderSystem);
  45. DrawHelper2D::startUp(cm_new<DrawHelper2D>());
  46. DrawHelper3D::startUp(cm_new<DrawHelper3D>());
  47. BuiltinResources::startUp(cm_new<BuiltinResources>());
  48. Cursor::startUp(cm_new<Cursor>());
  49. gApplication().loadPlugin("BansheeMono", &mMonoPlugin);
  50. gApplication().loadPlugin("SBansheeEngine", &mSBansheeEnginePlugin); // Scripting interface
  51. updateCallbackConn = gApplication().mainLoopCallback.connect(std::bind(&BsApplication::update, this));
  52. Cursor::instance().setCursor(CursorType::Arrow);
  53. }
  54. void BsApplication::runMainLoop()
  55. {
  56. gApplication().runMainLoop();
  57. }
  58. void BsApplication::shutDown()
  59. {
  60. updateCallbackConn.disconnect();
  61. ScriptManager::instance().destroy();
  62. gApplication().unloadPlugin(mSBansheeEnginePlugin);
  63. gApplication().unloadPlugin(mMonoPlugin);
  64. Cursor::shutDown();
  65. BuiltinResources::shutDown();
  66. DrawHelper3D::shutDown();
  67. DrawHelper2D::shutDown();
  68. GUIMaterialManager::instance().forceReleaseAllMaterials();
  69. BuiltinMaterialManager::shutDown();
  70. OverlayManager::shutDown();
  71. GUIManager::shutDown();
  72. GUIMaterialManager::shutDown();
  73. ScriptManager::shutDown();
  74. VirtualInput::shutDown();
  75. gApplication().shutDown();
  76. }
  77. void BsApplication::update()
  78. {
  79. VirtualInput::instance().update();
  80. PROFILE_CALL(GUIManager::instance().update(), "GUI");
  81. }
  82. const ViewportPtr& BsApplication::getPrimaryViewport() const
  83. {
  84. // TODO - Need a way to determine primary viewport!
  85. return nullptr;
  86. }
  87. BsApplication& gBansheeApp()
  88. {
  89. static BsApplication application;
  90. return application;
  91. }
  92. }