GUI: Allow shaders to be selected for individual targets

This commit is contained in:
Cameron Cawley 2020-01-29 23:13:32 +00:00 committed by rsn8887
parent 626c200d03
commit 7488e17c0a
21 changed files with 149 additions and 31 deletions

View file

@ -222,6 +222,7 @@ void registerDefaults() {
ConfMan.registerDefault("render_mode", "default"); ConfMan.registerDefault("render_mode", "default");
ConfMan.registerDefault("desired_screen_aspect_ratio", "auto"); ConfMan.registerDefault("desired_screen_aspect_ratio", "auto");
ConfMan.registerDefault("stretch_mode", "default"); ConfMan.registerDefault("stretch_mode", "default");
ConfMan.registerDefault("shader", 0);
// Sound & Music // Sound & Music
ConfMan.registerDefault("music_volume", 192); ConfMan.registerDefault("music_volume", 192);

View file

@ -339,6 +339,8 @@ static void setupGraphics(OSystem &system) {
system.setFeatureState(OSystem::kFeatureFilteringMode, ConfMan.getBool("filtering")); system.setFeatureState(OSystem::kFeatureFilteringMode, ConfMan.getBool("filtering"));
if (ConfMan.hasKey("stretch_mode")) if (ConfMan.hasKey("stretch_mode"))
system.setStretchMode(ConfMan.get("stretch_mode").c_str()); system.setStretchMode(ConfMan.get("stretch_mode").c_str());
if (ConfMan.hasKey("shader"))
system.setShader(ConfMan.getInt("shader"));
system.endGFXTransaction(); system.endGFXTransaction();
// When starting up launcher for the first time, the user might have specified // When starting up launcher for the first time, the user might have specified

View file

@ -215,6 +215,9 @@ void initCommonGFX() {
if (gameDomain->contains("stretch_mode")) if (gameDomain->contains("stretch_mode"))
g_system->setStretchMode(ConfMan.get("stretch_mode").c_str()); g_system->setStretchMode(ConfMan.get("stretch_mode").c_str());
if (gameDomain->contains("shader"))
g_system->setShader(ConfMan.getInt("shader"));
} }
} }

View file

@ -37,7 +37,7 @@
#include "graphics/pixelformat.h" #include "graphics/pixelformat.h"
#define SCUMMVM_THEME_VERSION_STR "SCUMMVM_STX0.8.34" #define SCUMMVM_THEME_VERSION_STR "SCUMMVM_STX0.8.35"
class OSystem; class OSystem;

View file

@ -64,6 +64,7 @@ enum {
kSearchClearCmd = 'SRCL', kSearchClearCmd = 'SRCL',
kCmdGlobalGraphicsOverride = 'OGFX', kCmdGlobalGraphicsOverride = 'OGFX',
kCmdGlobalShaderOverride = 'OSHD',
kCmdGlobalAudioOverride = 'OSFX', kCmdGlobalAudioOverride = 'OSFX',
kCmdGlobalMIDIOverride = 'OMID', kCmdGlobalMIDIOverride = 'OMID',
kCmdGlobalMT32Override = 'OM32', kCmdGlobalMT32Override = 'OM32',
@ -197,6 +198,22 @@ EditGameDialog::EditGameDialog(const String &domain)
addGraphicControls(graphicsContainer, "GameOptions_Graphics_Container."); 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 // The Keymap tab
// //
@ -344,6 +361,11 @@ void EditGameDialog::open() {
ConfMan.hasKey("aspect_ratio", _domain); ConfMan.hasKey("aspect_ratio", _domain);
_globalGraphicsOverride->setState(e); _globalGraphicsOverride->setState(e);
if (g_system->hasFeature(OSystem::kFeatureShader)) {
e = ConfMan.hasKey("shader", _domain);
_globalShaderOverride->setState(e);
}
e = ConfMan.hasKey("music_driver", _domain) || e = ConfMan.hasKey("music_driver", _domain) ||
ConfMan.hasKey("output_rate", _domain) || ConfMan.hasKey("output_rate", _domain) ||
ConfMan.hasKey("opl_driver", _domain) || ConfMan.hasKey("opl_driver", _domain) ||
@ -451,6 +473,10 @@ void EditGameDialog::handleCommand(CommandSender *sender, uint32 cmd, uint32 dat
setGraphicSettingsState(data != 0); setGraphicSettingsState(data != 0);
g_gui.scheduleTopDialogRedraw(); g_gui.scheduleTopDialogRedraw();
break; break;
case kCmdGlobalShaderOverride:
setShaderSettingsState(data != 0);
g_gui.scheduleTopDialogRedraw();
break;
case kCmdGlobalAudioOverride: case kCmdGlobalAudioOverride:
setAudioSettingsState(data != 0); setAudioSettingsState(data != 0);
setSubtitleSettingsState(data != 0); setSubtitleSettingsState(data != 0);

View file

@ -84,6 +84,7 @@ protected:
PopUpWidget *_platformPopUp; PopUpWidget *_platformPopUp;
CheckboxWidget *_globalGraphicsOverride; CheckboxWidget *_globalGraphicsOverride;
CheckboxWidget *_globalShaderOverride;
CheckboxWidget *_globalAudioOverride; CheckboxWidget *_globalAudioOverride;
CheckboxWidget *_globalMIDIOverride; CheckboxWidget *_globalMIDIOverride;
CheckboxWidget *_globalMT32Override; CheckboxWidget *_globalMT32Override;

View file

@ -348,10 +348,15 @@ void OptionsDialog::build() {
} }
// Shader options // Shader options
if (g_system->hasFeature(OSystem::kFeatureShader)) { if (_shaderPopUp) {
if (_shaderPopUp) { _shaderPopUp->setSelected(0);
int value = ConfMan.getInt("shader", _domain);
_shaderPopUp->setSelected(value); 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 // Setup graphics again if needed
if (_domain == Common::ConfigManager::kApplicationDomain && graphicsModeChanged) { if (_domain == Common::ConfigManager::kApplicationDomain && graphicsModeChanged) {
g_system->beginGFXTransaction(); g_system->beginGFXTransaction();
@ -547,6 +565,8 @@ void OptionsDialog::apply() {
g_system->setFeatureState(OSystem::kFeatureFullscreenMode, ConfMan.getBool("fullscreen", _domain)); g_system->setFeatureState(OSystem::kFeatureFullscreenMode, ConfMan.getBool("fullscreen", _domain));
if (ConfMan.hasKey("filtering")) if (ConfMan.hasKey("filtering"))
g_system->setFeatureState(OSystem::kFeatureFilteringMode, ConfMan.getBool("filtering", _domain)); 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(); 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) { if (_keymapperWidget) {
bool changes = _keymapperWidget->save(); bool changes = _keymapperWidget->save();
if (changes) { if (changes) {
@ -909,6 +917,13 @@ void OptionsDialog::setGraphicSettingsState(bool enabled) {
_aspectCheckbox->setEnabled(enabled); _aspectCheckbox->setEnabled(enabled);
} }
void OptionsDialog::setShaderSettingsState(bool enabled) {
_enableShaderSettings = enabled;
_shaderPopUpDesc->setEnabled(enabled);
_shaderPopUp->setEnabled(enabled);
}
void OptionsDialog::setAudioSettingsState(bool enabled) { void OptionsDialog::setAudioSettingsState(bool enabled) {
_enableAudioSettings = enabled; _enableAudioSettings = enabled;
_midiPopUpDesc->setEnabled(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) { void OptionsDialog::addShaderControls(GuiObject *boss, const Common::String &prefix) {
// Shader selector // Shader selector
if (g_system->hasFeature(OSystem::kFeatureShader)) { if (g_system->getOverlayWidth() > 320)
if (g_system->getOverlayWidth() > 320) _shaderPopUpDesc = new StaticTextWidget(boss, prefix + "grShaderPopUpDesc", _("HW Shader:"), _("Different hardware shaders give different visual effects"));
_shaderPopUpDesc = new StaticTextWidget(boss, prefix + "grShaderPopUpDesc", _("HW Shader:"), _("Different hardware shaders give different visual effects")); else
else _shaderPopUpDesc = new StaticTextWidget(boss, prefix + "grShaderPopUpDesc", _c("HW Shader:", "lowres"), _("Different hardware shaders give different visual effects"));
_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"));
_shaderPopUp = new PopUpWidget(boss, prefix + "grShaderPopUp", _("Different shaders give different visual effects")); const OSystem::GraphicsMode *p = g_system->getSupportedShaders();
const OSystem::GraphicsMode *p = g_system->getSupportedShaders(); while (p->name) {
while (p->name) { _shaderPopUp->appendEntry(p->name, p->id);
_shaderPopUp->appendEntry(p->name, p->id); p++;
p++;
}
} }
_enableShaderSettings = true; _enableShaderSettings = true;
} }

View file

@ -107,6 +107,7 @@ protected:
void addEngineControls(GuiObject *boss, const Common::String &prefix, const ExtraGuiOptions &engineOptions); void addEngineControls(GuiObject *boss, const Common::String &prefix, const ExtraGuiOptions &engineOptions);
void setGraphicSettingsState(bool enabled); void setGraphicSettingsState(bool enabled);
void setShaderSettingsState(bool enabled);
void setAudioSettingsState(bool enabled); void setAudioSettingsState(bool enabled);
void setMIDISettingsState(bool enabled); void setMIDISettingsState(bool enabled);
void setMT32SettingsState(bool enabled); void setMT32SettingsState(bool enabled);

View file

@ -1857,6 +1857,14 @@ const char *defaultXML1 = "<?xml version = '1.0'?>"
"<import layout='Dialog.GlobalOptions_Graphics_Container' />" "<import layout='Dialog.GlobalOptions_Graphics_Container' />"
"</layout>" "</layout>"
"</dialog>" "</dialog>"
"<dialog name='GameOptions_Shader' overlays='Dialog.GameOptions.TabWidget'>"
"<layout type='vertical' padding='16,16,16,16' spacing='8'>"
"<widget name='EnableTabCheckbox' "
"type='Checkbox' "
"/>"
"<import layout='Dialog.GlobalOptions_Shader' />"
"</layout>"
"</dialog>"
"<dialog name='GameOptions_Audio' overlays='Dialog.GameOptions.TabWidget'>" "<dialog name='GameOptions_Audio' overlays='Dialog.GameOptions.TabWidget'>"
"<layout type='vertical' padding='16,16,16,16' spacing='8'>" "<layout type='vertical' padding='16,16,16,16' spacing='8'>"
"<widget name='EnableTabCheckbox' " "<widget name='EnableTabCheckbox' "
@ -3643,6 +3651,14 @@ const char *defaultXML1 = "<?xml version = '1.0'?>"
"<import layout='Dialog.GlobalOptions_Graphics_Container' />" "<import layout='Dialog.GlobalOptions_Graphics_Container' />"
"</layout>" "</layout>"
"</dialog>" "</dialog>"
"<dialog name='GameOptions_Shader' overlays='Dialog.GameOptions.TabWidget'>"
"<layout type='vertical' padding='8,8,8,8' spacing='6'>"
"<widget name='EnableTabCheckbox' "
"type='Checkbox' "
"/>"
"<import layout='Dialog.GlobalOptions_Shader' />"
"</layout>"
"</dialog>"
"<dialog name='GameOptions_Audio' overlays='Dialog.GameOptions.TabWidget'>" "<dialog name='GameOptions_Audio' overlays='Dialog.GameOptions.TabWidget'>"
"<layout type='vertical' padding='8,8,8,8' spacing='6'>" "<layout type='vertical' padding='8,8,8,8' spacing='6'>"
"<widget name='EnableTabCheckbox' " "<widget name='EnableTabCheckbox' "

Binary file not shown.

View file

@ -1 +1 @@
[SCUMMVM_STX0.8.34:ScummVM Classic Theme:No Author] [SCUMMVM_STX0.8.35:ScummVM Classic Theme:No Author]

View file

@ -1005,6 +1005,15 @@
</layout> </layout>
</dialog> </dialog>
<dialog name = 'GameOptions_Shader' overlays = 'Dialog.GameOptions.TabWidget'>
<layout type = 'vertical' padding = '16, 16, 16, 16' spacing = '8'>
<widget name = 'EnableTabCheckbox'
type = 'Checkbox'
/>
<import layout = 'Dialog.GlobalOptions_Shader' />
</layout>
</dialog>
<dialog name = 'GameOptions_Audio' overlays = 'Dialog.GameOptions.TabWidget'> <dialog name = 'GameOptions_Audio' overlays = 'Dialog.GameOptions.TabWidget'>
<layout type = 'vertical' padding = '16, 16, 16, 16' spacing = '8'> <layout type = 'vertical' padding = '16, 16, 16, 16' spacing = '8'>
<widget name = 'EnableTabCheckbox' <widget name = 'EnableTabCheckbox'

View file

@ -1006,6 +1006,15 @@
</layout> </layout>
</dialog> </dialog>
<dialog name = 'GameOptions_Shader' overlays = 'Dialog.GameOptions.TabWidget'>
<layout type = 'vertical' padding = '8, 8, 8, 8' spacing = '6'>
<widget name = 'EnableTabCheckbox'
type = 'Checkbox'
/>
<import layout = 'Dialog.GlobalOptions_Shader' />
</layout>
</dialog>
<dialog name = 'GameOptions_Audio' overlays = 'Dialog.GameOptions.TabWidget'> <dialog name = 'GameOptions_Audio' overlays = 'Dialog.GameOptions.TabWidget'>
<layout type = 'vertical' padding = '8, 8, 8, 8' spacing = '6'> <layout type = 'vertical' padding = '8, 8, 8, 8' spacing = '6'>
<widget name = 'EnableTabCheckbox' <widget name = 'EnableTabCheckbox'

Binary file not shown.

View file

@ -1 +1 @@
[SCUMMVM_STX0.8.34:ScummVM Modern Theme:No Author] [SCUMMVM_STX0.8.35:ScummVM Modern Theme:No Author]

View file

@ -1018,6 +1018,15 @@
</layout> </layout>
</dialog> </dialog>
<dialog name = 'GameOptions_Shader' overlays = 'Dialog.GameOptions.TabWidget'>
<layout type = 'vertical' padding = '16, 16, 16, 16' spacing = '8'>
<widget name = 'EnableTabCheckbox'
type = 'Checkbox'
/>
<import layout = 'Dialog.GlobalOptions_Shader' />
</layout>
</dialog>
<dialog name = 'GameOptions_Audio' overlays = 'Dialog.GameOptions.TabWidget'> <dialog name = 'GameOptions_Audio' overlays = 'Dialog.GameOptions.TabWidget'>
<layout type = 'vertical' padding = '16, 16, 16, 16' spacing = '8'> <layout type = 'vertical' padding = '16, 16, 16, 16' spacing = '8'>
<widget name = 'EnableTabCheckbox' <widget name = 'EnableTabCheckbox'

View file

@ -1005,6 +1005,15 @@
</layout> </layout>
</dialog> </dialog>
<dialog name = 'GameOptions_Shader' overlays = 'Dialog.GameOptions.TabWidget'>
<layout type = 'vertical' padding = '8, 8, 8, 8' spacing = '6'>
<widget name = 'EnableTabCheckbox'
type = 'Checkbox'
/>
<import layout = 'Dialog.GlobalOptions_Shader' />
</layout>
</dialog>
<dialog name = 'GameOptions_Audio' overlays = 'Dialog.GameOptions.TabWidget'> <dialog name = 'GameOptions_Audio' overlays = 'Dialog.GameOptions.TabWidget'>
<layout type = 'vertical' padding = '8, 8, 8, 8' spacing = '6'> <layout type = 'vertical' padding = '8, 8, 8, 8' spacing = '6'>
<widget name = 'EnableTabCheckbox' <widget name = 'EnableTabCheckbox'

Binary file not shown.

View file

@ -1 +1 @@
[SCUMMVM_STX0.8.34:ScummVM Modern Theme Remastered:No Author] [SCUMMVM_STX0.8.35:ScummVM Modern Theme Remastered:No Author]

View file

@ -1018,6 +1018,15 @@
</layout> </layout>
</dialog> </dialog>
<dialog name = 'GameOptions_Shader' overlays = 'Dialog.GameOptions.TabWidget'>
<layout type = 'vertical' padding = '16, 16, 16, 16' spacing = '8'>
<widget name = 'EnableTabCheckbox'
type = 'Checkbox'
/>
<import layout = 'Dialog.GlobalOptions_Shader' />
</layout>
</dialog>
<dialog name = 'GameOptions_Audio' overlays = 'Dialog.GameOptions.TabWidget'> <dialog name = 'GameOptions_Audio' overlays = 'Dialog.GameOptions.TabWidget'>
<layout type = 'vertical' padding = '16, 16, 16, 16' spacing = '8'> <layout type = 'vertical' padding = '16, 16, 16, 16' spacing = '8'>
<widget name = 'EnableTabCheckbox' <widget name = 'EnableTabCheckbox'

View file

@ -1005,6 +1005,15 @@
</layout> </layout>
</dialog> </dialog>
<dialog name = 'GameOptions_Shader' overlays = 'Dialog.GameOptions.TabWidget'>
<layout type = 'vertical' padding = '8, 8, 8, 8' spacing = '6'>
<widget name = 'EnableTabCheckbox'
type = 'Checkbox'
/>
<import layout = 'Dialog.GlobalOptions_Shader' />
</layout>
</dialog>
<dialog name = 'GameOptions_Audio' overlays = 'Dialog.GameOptions.TabWidget'> <dialog name = 'GameOptions_Audio' overlays = 'Dialog.GameOptions.TabWidget'>
<layout type = 'vertical' padding = '8, 8, 8, 8' spacing = '6'> <layout type = 'vertical' padding = '8, 8, 8, 8' spacing = '6'>
<widget name = 'EnableTabCheckbox' <widget name = 'EnableTabCheckbox'