CmRenderSystemManager.cpp 1.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
  1. #include "CmRenderSystemManager.h"
  2. #include "CmException.h"
  3. #include "CmRenderSystem.h"
  4. namespace CamelotEngine
  5. {
  6. RenderSystemPtr RenderSystemManager::mActiveRenderSystem;
  7. void RenderSystemManager::initialize(const std::string& name)
  8. {
  9. assert(mActiveRenderSystem == nullptr); // Once loaded the render system is set for life
  10. for(auto iter = getAvailableFactories().begin(); iter != getAvailableFactories().end(); ++iter)
  11. {
  12. if((*iter)->name() == name)
  13. {
  14. RenderSystemPtr newRenderSystem = (*iter)->create();
  15. if(newRenderSystem != nullptr)
  16. {
  17. if(mActiveRenderSystem != nullptr)
  18. mActiveRenderSystem->shutdown();
  19. mActiveRenderSystem = newRenderSystem;
  20. }
  21. }
  22. }
  23. if(mActiveRenderSystem == nullptr)
  24. {
  25. OGRE_EXCEPT(CamelotEngine::Exception::ERR_INTERNAL_ERROR,
  26. "Cannot initialize render system. Renderer with the name '" + name + "' cannot be found.",
  27. "RenderSystemManager::initialize")
  28. }
  29. }
  30. void RenderSystemManager::registerRenderSystemFactory(RenderSystemFactoryPtr factory)
  31. {
  32. assert(factory != nullptr);
  33. getAvailableFactories().push_back(factory);
  34. }
  35. std::vector<RenderSystemFactoryPtr>& RenderSystemManager::getAvailableFactories()
  36. {
  37. static std::vector<RenderSystemFactoryPtr> availableFactories;
  38. return availableFactories;
  39. }
  40. }