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/plugins.cpp | |
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/plugins.cpp')
-rw-r--r-- | base/plugins.cpp | 24 |
1 files changed, 24 insertions, 0 deletions
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); |