| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657 |
- #include "CmRenderSystemManager.h"
- #include "CmException.h"
- #include "CmRenderSystem.h"
- #include "CmDynLib.h"
- #include "CmDynLibManager.h"
- namespace CamelotFramework
- {
- RenderSystemManager::RenderSystemManager()
- :mRenderSystemInitialized(false)
- { }
- RenderSystemManager::~RenderSystemManager()
- {
- if(mRenderSystemInitialized)
- {
- RenderSystem::instance().destroy();
- RenderSystem::shutDown();
- }
- }
- RenderWindowPtr RenderSystemManager::initialize(const String& pluginFilename, RENDER_WINDOW_DESC& primaryWindowDesc)
- {
- if(mRenderSystemInitialized)
- return nullptr;
- DynLib* loadedLibrary = gDynLibManager().load(pluginFilename);
- String name = "";
- if(loadedLibrary != nullptr)
- {
- typedef const String& (*GetPluginNameFunc)();
- GetPluginNameFunc getPluginNameFunc = (GetPluginNameFunc)loadedLibrary->getSymbol("getPluginName");
- name = getPluginNameFunc();
- }
- for(auto iter = mAvailableFactories.begin(); iter != mAvailableFactories.end(); ++iter)
- {
- if((*iter)->name() == name)
- {
- (*iter)->create();
- mRenderSystemInitialized = true;
- return RenderSystem::instance().initialize(primaryWindowDesc);
- }
- }
- return nullptr;
- }
- void RenderSystemManager::registerRenderSystemFactory(RenderSystemFactoryPtr factory)
- {
- assert(factory != nullptr);
- mAvailableFactories.push_back(factory);
- }
- }
|