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.
This commit is contained in:
Eric Culp 2012-06-12 15:03:51 -04:00 committed by Filippos Karapetis
parent 36b4926eb1
commit 6d11f46b15
3 changed files with 28 additions and 2 deletions

View File

@ -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"));

View File

@ -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);

View File

@ -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