BsRendererManager.cpp 1.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152
  1. //********************************** Banshee Engine (www.banshee3d.com) **************************************************//
  2. //**************** Copyright (c) 2016 Marko Pintera ([email protected]). All rights reserved. **********************//
  3. #include "Renderer/BsRendererManager.h"
  4. #include "Renderer/BsRenderer.h"
  5. #include "Error/BsException.h"
  6. #include "Renderer/BsRendererFactory.h"
  7. namespace bs
  8. {
  9. RendererManager::~RendererManager()
  10. {
  11. if (mActiveRenderer != nullptr)
  12. mActiveRenderer->destroy();
  13. }
  14. void RendererManager::setActive(const String& name)
  15. {
  16. for(auto iter = mAvailableFactories.begin(); iter != mAvailableFactories.end(); ++iter)
  17. {
  18. if((*iter)->name() == name)
  19. {
  20. SPtr<ct::Renderer> newRenderer = (*iter)->create();
  21. if(newRenderer != nullptr)
  22. {
  23. if (mActiveRenderer != nullptr)
  24. mActiveRenderer->destroy();
  25. mActiveRenderer = newRenderer;
  26. }
  27. }
  28. }
  29. if(mActiveRenderer == nullptr)
  30. {
  31. BS_EXCEPT(InternalErrorException,
  32. "Cannot initialize renderer. Renderer with the name '" + name + "' cannot be found.")
  33. }
  34. }
  35. void RendererManager::initialize()
  36. {
  37. if (mActiveRenderer != nullptr)
  38. mActiveRenderer->initialize();
  39. }
  40. void RendererManager::_registerFactory(SPtr<RendererFactory> factory)
  41. {
  42. assert(factory != nullptr);
  43. mAvailableFactories.push_back(factory);
  44. }
  45. }