CmRenderSystemManager.cpp 1.2 KB

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