BsRenderAPIManager.cpp 1.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  1. //********************************** Banshee Engine (www.banshee3d.com) **************************************************//
  2. //**************** Copyright (c) 2016 Marko Pintera ([email protected]). All rights reserved. **********************//
  3. #include "Managers/BsRenderAPIManager.h"
  4. #include "Error/BsException.h"
  5. #include "RenderAPI/BsRenderAPI.h"
  6. #include "Utility/BsDynLib.h"
  7. #include "Utility/BsDynLibManager.h"
  8. namespace bs
  9. {
  10. RenderAPIManager::RenderAPIManager()
  11. :mRenderAPIInitialized(false)
  12. { }
  13. RenderAPIManager::~RenderAPIManager()
  14. {
  15. if(mRenderAPIInitialized)
  16. {
  17. ct::RenderAPI::instance().destroy();
  18. ct::RenderAPI::shutDown();
  19. }
  20. }
  21. SPtr<RenderWindow> RenderAPIManager::initialize(const String& pluginFilename, RENDER_WINDOW_DESC& primaryWindowDesc)
  22. {
  23. if(mRenderAPIInitialized)
  24. return nullptr;
  25. DynLib* loadedLibrary = gDynLibManager().load(pluginFilename);
  26. const char* name = "";
  27. if(loadedLibrary != nullptr)
  28. {
  29. typedef const char* (*GetPluginNameFunc)();
  30. GetPluginNameFunc getPluginNameFunc = (GetPluginNameFunc)loadedLibrary->getSymbol("getPluginName");
  31. name = getPluginNameFunc();
  32. }
  33. for(auto iter = mAvailableFactories.begin(); iter != mAvailableFactories.end(); ++iter)
  34. {
  35. if(strcmp((*iter)->name(), name) == 0)
  36. {
  37. (*iter)->create();
  38. mRenderAPIInitialized = true;
  39. return ct::RenderAPI::instance().initialize(primaryWindowDesc);
  40. }
  41. }
  42. return nullptr;
  43. }
  44. void RenderAPIManager::registerFactory(SPtr<RenderAPIFactory> factory)
  45. {
  46. assert(factory != nullptr);
  47. mAvailableFactories.push_back(factory);
  48. }
  49. }