diff --git a/base/commandLine.cpp b/base/commandLine.cpp index b05ec5ded8f..23bc1ae11a2 100644 --- a/base/commandLine.cpp +++ b/base/commandLine.cpp @@ -222,6 +222,7 @@ void registerDefaults() { ConfMan.registerDefault("render_mode", "default"); ConfMan.registerDefault("desired_screen_aspect_ratio", "auto"); ConfMan.registerDefault("stretch_mode", "default"); + ConfMan.registerDefault("shader", 0); // Sound & Music ConfMan.registerDefault("music_volume", 192); diff --git a/base/main.cpp b/base/main.cpp index 0b59e0710dc..3f50ed4dffa 100644 --- a/base/main.cpp +++ b/base/main.cpp @@ -339,6 +339,8 @@ static void setupGraphics(OSystem &system) { system.setFeatureState(OSystem::kFeatureFilteringMode, ConfMan.getBool("filtering")); if (ConfMan.hasKey("stretch_mode")) system.setStretchMode(ConfMan.get("stretch_mode").c_str()); + if (ConfMan.hasKey("shader")) + system.setShader(ConfMan.getInt("shader")); system.endGFXTransaction(); // When starting up launcher for the first time, the user might have specified diff --git a/engines/engine.cpp b/engines/engine.cpp index 8d88b68796b..fcd6df37d4c 100644 --- a/engines/engine.cpp +++ b/engines/engine.cpp @@ -215,6 +215,9 @@ void initCommonGFX() { if (gameDomain->contains("stretch_mode")) g_system->setStretchMode(ConfMan.get("stretch_mode").c_str()); + + if (gameDomain->contains("shader")) + g_system->setShader(ConfMan.getInt("shader")); } } diff --git a/gui/ThemeEngine.h b/gui/ThemeEngine.h index 208b16260e1..fd71734debf 100644 --- a/gui/ThemeEngine.h +++ b/gui/ThemeEngine.h @@ -37,7 +37,7 @@ #include "graphics/pixelformat.h" -#define SCUMMVM_THEME_VERSION_STR "SCUMMVM_STX0.8.34" +#define SCUMMVM_THEME_VERSION_STR "SCUMMVM_STX0.8.35" class OSystem; diff --git a/gui/editgamedialog.cpp b/gui/editgamedialog.cpp index 76a5e53ce8c..a141fa105cc 100644 --- a/gui/editgamedialog.cpp +++ b/gui/editgamedialog.cpp @@ -64,6 +64,7 @@ enum { kSearchClearCmd = 'SRCL', kCmdGlobalGraphicsOverride = 'OGFX', + kCmdGlobalShaderOverride = 'OSHD', kCmdGlobalAudioOverride = 'OSFX', kCmdGlobalMIDIOverride = 'OMID', kCmdGlobalMT32Override = 'OM32', @@ -197,6 +198,22 @@ EditGameDialog::EditGameDialog(const String &domain) addGraphicControls(graphicsContainer, "GameOptions_Graphics_Container."); + // + // The shader tab (currently visible only for Vita platform), visibility checking by features + // + + _globalShaderOverride = nullptr; + if (g_system->hasFeature(OSystem::kFeatureShader)) { + tab->addTab(_("Shader"), "GameOptions_Shader"); + + if (g_system->getOverlayWidth() > 320) + _globalShaderOverride = new CheckboxWidget(tab, "GameOptions_Shader.EnableTabCheckbox", _("Override global shader settings"), nullptr, kCmdGlobalShaderOverride); + else + _globalShaderOverride = new CheckboxWidget(tab, "GameOptions_Shader.EnableTabCheckbox", _c("Override global shader settings", "lowres"), nullptr, kCmdGlobalShaderOverride); + + addShaderControls(tab, "GameOptions_Shader."); + } + // // The Keymap tab // @@ -344,6 +361,11 @@ void EditGameDialog::open() { ConfMan.hasKey("aspect_ratio", _domain); _globalGraphicsOverride->setState(e); + if (g_system->hasFeature(OSystem::kFeatureShader)) { + e = ConfMan.hasKey("shader", _domain); + _globalShaderOverride->setState(e); + } + e = ConfMan.hasKey("music_driver", _domain) || ConfMan.hasKey("output_rate", _domain) || ConfMan.hasKey("opl_driver", _domain) || @@ -451,6 +473,10 @@ void EditGameDialog::handleCommand(CommandSender *sender, uint32 cmd, uint32 dat setGraphicSettingsState(data != 0); g_gui.scheduleTopDialogRedraw(); break; + case kCmdGlobalShaderOverride: + setShaderSettingsState(data != 0); + g_gui.scheduleTopDialogRedraw(); + break; case kCmdGlobalAudioOverride: setAudioSettingsState(data != 0); setSubtitleSettingsState(data != 0); diff --git a/gui/editgamedialog.h b/gui/editgamedialog.h index 8f74bebedb0..8832865e512 100644 --- a/gui/editgamedialog.h +++ b/gui/editgamedialog.h @@ -84,6 +84,7 @@ protected: PopUpWidget *_platformPopUp; CheckboxWidget *_globalGraphicsOverride; + CheckboxWidget *_globalShaderOverride; CheckboxWidget *_globalAudioOverride; CheckboxWidget *_globalMIDIOverride; CheckboxWidget *_globalMT32Override; diff --git a/gui/options.cpp b/gui/options.cpp index 1c6dda0bf55..aac3c59632a 100644 --- a/gui/options.cpp +++ b/gui/options.cpp @@ -348,10 +348,15 @@ void OptionsDialog::build() { } // Shader options - if (g_system->hasFeature(OSystem::kFeatureShader)) { - if (_shaderPopUp) { - int value = ConfMan.getInt("shader", _domain); - _shaderPopUp->setSelected(value); + if (_shaderPopUp) { + _shaderPopUp->setSelected(0); + + if (g_system->hasFeature(OSystem::kFeatureShader)) { + // TODO: Consider storing the name of the shader instead of the ID. + _shaderPopUp->setSelected(ConfMan.getInt("shader", _domain)); + } else { + _shaderPopUpDesc->setVisible(false); + _shaderPopUp->setVisible(false); } } @@ -534,6 +539,19 @@ void OptionsDialog::apply() { } } + // Shader options + if (_shaderPopUp) { + if (_enableShaderSettings) { + if (ConfMan.getInt("shader", _domain) != (int32)_shaderPopUp->getSelectedTag()) + graphicsModeChanged = true; + + // TODO: Consider storing the name of the shader instead of the ID. + ConfMan.setInt("shader", _shaderPopUp->getSelectedTag(), _domain); + } else { + ConfMan.removeKey("shader", _domain); + } + } + // Setup graphics again if needed if (_domain == Common::ConfigManager::kApplicationDomain && graphicsModeChanged) { g_system->beginGFXTransaction(); @@ -547,6 +565,8 @@ void OptionsDialog::apply() { g_system->setFeatureState(OSystem::kFeatureFullscreenMode, ConfMan.getBool("fullscreen", _domain)); if (ConfMan.hasKey("filtering")) g_system->setFeatureState(OSystem::kFeatureFilteringMode, ConfMan.getBool("filtering", _domain)); + if (ConfMan.hasKey("shader")) + g_system->setShader(ConfMan.getInt("shader", _domain)); OSystem::TransactionError gfxError = g_system->endGFXTransaction(); @@ -616,18 +636,6 @@ void OptionsDialog::apply() { } } - // Shader options - if (_enableShaderSettings) { - if (g_system->hasFeature(OSystem::kFeatureShader)) { - if (_shaderPopUp) { - if (ConfMan.getInt("shader", _domain) != (int32)_shaderPopUp->getSelectedTag()) { - ConfMan.setInt("shader", _shaderPopUp->getSelectedTag(), _domain); - g_system->setShader(_shaderPopUp->getSelectedTag()); - } - } - } - } - if (_keymapperWidget) { bool changes = _keymapperWidget->save(); if (changes) { @@ -909,6 +917,13 @@ void OptionsDialog::setGraphicSettingsState(bool enabled) { _aspectCheckbox->setEnabled(enabled); } +void OptionsDialog::setShaderSettingsState(bool enabled) { + _enableShaderSettings = enabled; + + _shaderPopUpDesc->setEnabled(enabled); + _shaderPopUp->setEnabled(enabled); +} + void OptionsDialog::setAudioSettingsState(bool enabled) { _enableAudioSettings = enabled; _midiPopUpDesc->setEnabled(enabled); @@ -1068,18 +1083,17 @@ void OptionsDialog::addKeyMapperControls(GuiObject *boss, const Common::String & void OptionsDialog::addShaderControls(GuiObject *boss, const Common::String &prefix) { // Shader selector - if (g_system->hasFeature(OSystem::kFeatureShader)) { - if (g_system->getOverlayWidth() > 320) - _shaderPopUpDesc = new StaticTextWidget(boss, prefix + "grShaderPopUpDesc", _("HW Shader:"), _("Different hardware shaders give different visual effects")); - else - _shaderPopUpDesc = new StaticTextWidget(boss, prefix + "grShaderPopUpDesc", _c("HW Shader:", "lowres"), _("Different hardware shaders give different visual effects")); - _shaderPopUp = new PopUpWidget(boss, prefix + "grShaderPopUp", _("Different shaders give different visual effects")); - const OSystem::GraphicsMode *p = g_system->getSupportedShaders(); - while (p->name) { - _shaderPopUp->appendEntry(p->name, p->id); - p++; - } + if (g_system->getOverlayWidth() > 320) + _shaderPopUpDesc = new StaticTextWidget(boss, prefix + "grShaderPopUpDesc", _("HW Shader:"), _("Different hardware shaders give different visual effects")); + else + _shaderPopUpDesc = new StaticTextWidget(boss, prefix + "grShaderPopUpDesc", _c("HW Shader:", "lowres"), _("Different hardware shaders give different visual effects")); + _shaderPopUp = new PopUpWidget(boss, prefix + "grShaderPopUp", _("Different shaders give different visual effects")); + const OSystem::GraphicsMode *p = g_system->getSupportedShaders(); + while (p->name) { + _shaderPopUp->appendEntry(p->name, p->id); + p++; } + _enableShaderSettings = true; } diff --git a/gui/options.h b/gui/options.h index dd34ac92454..e012579d8ab 100644 --- a/gui/options.h +++ b/gui/options.h @@ -107,6 +107,7 @@ protected: void addEngineControls(GuiObject *boss, const Common::String &prefix, const ExtraGuiOptions &engineOptions); void setGraphicSettingsState(bool enabled); + void setShaderSettingsState(bool enabled); void setAudioSettingsState(bool enabled); void setMIDISettingsState(bool enabled); void setMT32SettingsState(bool enabled); diff --git a/gui/themes/default.inc b/gui/themes/default.inc index acc7608a0c5..7e36996d45b 100644 --- a/gui/themes/default.inc +++ b/gui/themes/default.inc @@ -1857,6 +1857,14 @@ const char *defaultXML1 = "" "" "" "" +"" +"" +"" +"" +"" +"" "" "" "" "" "" +"" +"" +"" +"" +"" +"" "" "" " + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +