BsRendererManager.cpp 1.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
  1. //__________________________ Banshee Project - A modern game development toolkit _________________________________//
  2. //_____________________________________ www.banshee-project.com __________________________________________________//
  3. //________________________ Copyright (c) 2014 Marko Pintera. All rights reserved. ________________________________//
  4. #include "BsRendererManager.h"
  5. #include "BsRenderer.h"
  6. #include "BsException.h"
  7. namespace BansheeEngine
  8. {
  9. RendererManager::~RendererManager()
  10. {
  11. if (mActiveRenderer != nullptr)
  12. mActiveRenderer->_onDeactivated();
  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. RendererPtr newRenderer = (*iter)->create();
  21. if(newRenderer != nullptr)
  22. {
  23. if (mActiveRenderer != nullptr)
  24. mActiveRenderer->_onDeactivated();
  25. mActiveRenderer = newRenderer;
  26. mActiveRenderer->_onActivated();
  27. }
  28. }
  29. }
  30. if(mActiveRenderer == nullptr)
  31. {
  32. BS_EXCEPT(InternalErrorException,
  33. "Cannot initialize renderer. Renderer with the name '" + name + "' cannot be found.")
  34. }
  35. }
  36. const String& RendererManager::getCoreRendererName()
  37. {
  38. static String name = "CoreRenderer";
  39. return name;
  40. }
  41. void RendererManager::_registerFactory(RendererFactoryPtr factory)
  42. {
  43. assert(factory != nullptr);
  44. mAvailableFactories.push_back(factory);
  45. }
  46. }