diff options
author | Eric Culp | 2012-06-12 15:03:51 -0400 |
---|---|---|
committer | Filippos Karapetis | 2019-03-10 03:49:29 +0200 |
commit | 6d11f46b15f9f69fd6c36c26b672b3f5b91f2142 (patch) | |
tree | 5686aeab1788aa99356fc702f9920e3fff27ea86 /base | |
parent | 36b4926eb156f00fa7365ece4e2352a8ddd8cd63 (diff) | |
download | scummvm-rg350-6d11f46b15f9f69fd6c36c26b672b3f5b91f2142.tar.gz scummvm-rg350-6d11f46b15f9f69fd6c36c26b672b3f5b91f2142.tar.bz2 scummvm-rg350-6d11f46b15f9f69fd6c36c26b672b3f5b91f2142.zip |
BASE: Only reload engine plugins after return to launcher
The other plugins do not need to be reloaded. Reloading
the scaler plugins breaks the graphics.
Diffstat (limited to 'base')
-rw-r--r-- | base/main.cpp | 2 | ||||
-rw-r--r-- | base/plugins.cpp | 24 | ||||
-rw-r--r-- | base/plugins.h | 4 |
3 files changed, 28 insertions, 2 deletions
diff --git a/base/main.cpp b/base/main.cpp index e9c0b967d3..352dbf9ab4 100644 --- a/base/main.cpp +++ b/base/main.cpp @@ -605,7 +605,7 @@ extern "C" int scummvm_main(int argc, const char * const argv[]) { ConfMan.setActiveDomain(""); } - PluginManager::instance().loadAllPlugins(); // only for cached manager + PluginManager::instance().loadAllPluginsOfType(PLUGIN_TYPE_ENGINE); // only for cached manager } else { GUI::displayErrorDialog(_("Could not find any engine capable of running the selected game")); diff --git a/base/plugins.cpp b/base/plugins.cpp index f4d18efb1c..55c99b1eda 100644 --- a/base/plugins.cpp +++ b/base/plugins.cpp @@ -379,6 +379,30 @@ void PluginManager::loadAllPlugins() { } } +void PluginManager::loadAllPluginsOfType(PluginType type) { + for (ProviderList::iterator pp = _providers.begin(); + pp != _providers.end(); + ++pp) { + PluginList pl((*pp)->getPlugins()); + for (PluginList::iterator p = pl.begin(); + p != pl.end(); + ++p) { + if ((*p)->loadPlugin()) { + if ((*p)->getType() == type) { + addToPluginsInMemList((*p)); + } else { + // Plugin is wrong type + (*p)->unloadPlugin(); + delete (*p); + } + } else { + // Plugin did not load + delete (*p); + } + } + } +} + void PluginManager::unloadAllPlugins() { for (int i = 0; i < PLUGIN_TYPE_MAX; i++) unloadPluginsExcept((PluginType)i, NULL); diff --git a/base/plugins.h b/base/plugins.h index bfeb68ae2d..1daa426202 100644 --- a/base/plugins.h +++ b/base/plugins.h @@ -320,6 +320,7 @@ public: // Functions used only by the cached PluginManager virtual void loadAllPlugins(); + virtual void loadAllPluginsOfType(PluginType type); void unloadAllPlugins(); void unloadPluginsExcept(PluginType type, const Plugin *plugin, bool deletePlugin = true); @@ -347,7 +348,8 @@ public: virtual bool loadPluginFromGameId(const Common::String &gameId); virtual void updateConfigWithFileName(const Common::String &gameId); - virtual void loadAllPlugins() {} // we don't allow this + virtual void loadAllPlugins() {} // we don't allow these + virtual void loadAllPluginsOfType(PluginType type) {} }; #endif |