CmRenderSystemManager.cpp 1.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657
  1. #include "CmRenderSystemManager.h"
  2. #include "CmException.h"
  3. #include "CmRenderSystem.h"
  4. #include "CmDynLib.h"
  5. #include "CmDynLibManager.h"
  6. namespace CamelotFramework
  7. {
  8. RenderSystemManager::RenderSystemManager()
  9. :mRenderSystemInitialized(false)
  10. { }
  11. RenderSystemManager::~RenderSystemManager()
  12. {
  13. if(mRenderSystemInitialized)
  14. {
  15. RenderSystem::instance().destroy();
  16. RenderSystem::shutDown();
  17. }
  18. }
  19. RenderWindowPtr RenderSystemManager::initialize(const String& pluginFilename, RENDER_WINDOW_DESC& primaryWindowDesc)
  20. {
  21. if(mRenderSystemInitialized)
  22. return nullptr;
  23. DynLib* loadedLibrary = gDynLibManager().load(pluginFilename);
  24. String name = "";
  25. if(loadedLibrary != nullptr)
  26. {
  27. typedef const String& (*GetPluginNameFunc)();
  28. GetPluginNameFunc getPluginNameFunc = (GetPluginNameFunc)loadedLibrary->getSymbol("getPluginName");
  29. name = getPluginNameFunc();
  30. }
  31. for(auto iter = mAvailableFactories.begin(); iter != mAvailableFactories.end(); ++iter)
  32. {
  33. if((*iter)->name() == name)
  34. {
  35. (*iter)->create();
  36. mRenderSystemInitialized = true;
  37. return RenderSystem::instance().initialize(primaryWindowDesc);
  38. }
  39. }
  40. return nullptr;
  41. }
  42. void RenderSystemManager::registerRenderSystemFactory(RenderSystemFactoryPtr factory)
  43. {
  44. assert(factory != nullptr);
  45. mAvailableFactories.push_back(factory);
  46. }
  47. }