BsRendererManager.cpp 1.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849
  1. #include "BsRendererManager.h"
  2. #include "BsCoreRenderer.h"
  3. #include "BsException.h"
  4. namespace BansheeEngine
  5. {
  6. RendererManager::~RendererManager()
  7. {
  8. if (mActiveRenderer != nullptr)
  9. mActiveRenderer->destroy();
  10. }
  11. void RendererManager::setActive(const String& name)
  12. {
  13. for(auto iter = mAvailableFactories.begin(); iter != mAvailableFactories.end(); ++iter)
  14. {
  15. if((*iter)->name() == name)
  16. {
  17. CoreRendererPtr newRenderer = (*iter)->create();
  18. if(newRenderer != nullptr)
  19. {
  20. if (mActiveRenderer != nullptr)
  21. mActiveRenderer->destroy();
  22. mActiveRenderer = newRenderer;
  23. }
  24. }
  25. }
  26. if(mActiveRenderer == nullptr)
  27. {
  28. BS_EXCEPT(InternalErrorException,
  29. "Cannot initialize renderer. Renderer with the name '" + name + "' cannot be found.")
  30. }
  31. }
  32. void RendererManager::initialize()
  33. {
  34. if (mActiveRenderer != nullptr)
  35. mActiveRenderer->initialize();
  36. }
  37. void RendererManager::_registerFactory(RendererFactoryPtr factory)
  38. {
  39. assert(factory != nullptr);
  40. mAvailableFactories.push_back(factory);
  41. }
  42. }