aboutsummaryrefslogtreecommitdiff
path: root/base
diff options
context:
space:
mode:
authorEric Culp2012-06-12 15:03:51 -0400
committerFilippos Karapetis2019-03-10 03:49:29 +0200
commit6d11f46b15f9f69fd6c36c26b672b3f5b91f2142 (patch)
tree5686aeab1788aa99356fc702f9920e3fff27ea86 /base
parent36b4926eb156f00fa7365ece4e2352a8ddd8cd63 (diff)
downloadscummvm-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.cpp2
-rw-r--r--base/plugins.cpp24
-rw-r--r--base/plugins.h4
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