CmRendererManager.cpp 1.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142
  1. #include "CmRendererManager.h"
  2. #include "CmRenderer.h"
  3. #include "CmException.h"
  4. namespace CamelotEngine
  5. {
  6. RendererPtr RendererManager::mActiveRenderer;
  7. void RendererManager::setActive(const String& name)
  8. {
  9. for(auto iter = getAvailableFactories().begin(); iter != getAvailableFactories().end(); ++iter)
  10. {
  11. if((*iter)->name() == name)
  12. {
  13. RendererPtr newRenderer = (*iter)->create();
  14. if(newRenderer != nullptr)
  15. {
  16. mActiveRenderer = newRenderer;
  17. }
  18. }
  19. }
  20. if(mActiveRenderer == nullptr)
  21. {
  22. CM_EXCEPT(InternalErrorException,
  23. "Cannot initialize renderer. Renderer with the name '" + name + "' cannot be found.")
  24. }
  25. }
  26. void RendererManager::registerFactory(RendererFactoryPtr factory)
  27. {
  28. assert(factory != nullptr);
  29. getAvailableFactories().push_back(factory);
  30. }
  31. std::vector<RendererFactoryPtr>& RendererManager::getAvailableFactories()
  32. {
  33. static std::vector<RendererFactoryPtr> availableFactories;
  34. return availableFactories;
  35. }
  36. }