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 = ""
""
""
""
+""
""
+""
"
+
+
+
+
+
+
+
+
+
+
+
+