BsRenderSystemManager.cpp 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  1. //__________________________ Banshee Project - A modern game development toolkit _________________________________//
  2. //_____________________________________ www.banshee-project.com __________________________________________________//
  3. //________________________ Copyright (c) 2014 Marko Pintera. All rights reserved. ________________________________//
  4. #include "BsRenderSystemManager.h"
  5. #include "BsException.h"
  6. #include "BsRenderSystem.h"
  7. #include "BsDynLib.h"
  8. #include "BsDynLibManager.h"
  9. namespace BansheeEngine
  10. {
  11. RenderSystemManager::RenderSystemManager()
  12. :mRenderSystemInitialized(false)
  13. { }
  14. RenderSystemManager::~RenderSystemManager()
  15. {
  16. if(mRenderSystemInitialized)
  17. {
  18. RenderSystem::instance().destroy();
  19. RenderSystem::shutDown();
  20. }
  21. }
  22. RenderWindowPtr RenderSystemManager::initialize(const String& pluginFilename, RENDER_WINDOW_DESC& primaryWindowDesc)
  23. {
  24. if(mRenderSystemInitialized)
  25. return nullptr;
  26. DynLib* loadedLibrary = gDynLibManager().load(pluginFilename);
  27. String name = "";
  28. if(loadedLibrary != nullptr)
  29. {
  30. typedef const String& (*GetPluginNameFunc)();
  31. GetPluginNameFunc getPluginNameFunc = (GetPluginNameFunc)loadedLibrary->getSymbol("getPluginName");
  32. name = getPluginNameFunc();
  33. }
  34. for(auto iter = mAvailableFactories.begin(); iter != mAvailableFactories.end(); ++iter)
  35. {
  36. if((*iter)->name() == name)
  37. {
  38. (*iter)->create();
  39. mRenderSystemInitialized = true;
  40. return RenderSystem::instance().initialize(primaryWindowDesc);
  41. }
  42. }
  43. return nullptr;
  44. }
  45. void RenderSystemManager::registerRenderSystemFactory(RenderSystemFactoryPtr factory)
  46. {
  47. assert(factory != nullptr);
  48. mAvailableFactories.push_back(factory);
  49. }
  50. }