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("desired_screen_aspect_ratio", "auto");
ConfMan.registerDefault("stretch_mode", "default");
ConfMan.registerDefault("shader", 0);
// Sound & Music
ConfMan.registerDefault("music_volume", 192);

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

@ -1857,6 +1857,14 @@ const char *defaultXML1 = "<?xml version = '1.0'?>"
"<import layout='Dialog.GlobalOptions_Graphics_Container' />"
"</layout>"
"</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'>"
"<layout type='vertical' padding='16,16,16,16' spacing='8'>"
"<widget name='EnableTabCheckbox' "
@ -3643,6 +3651,14 @@ const char *defaultXML1 = "<?xml version = '1.0'?>"
"<import layout='Dialog.GlobalOptions_Graphics_Container' />"
"</layout>"
"</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'>"
"<layout type='vertical' padding='8,8,8,8' spacing='6'>"
"<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>
</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'>
<layout type = 'vertical' padding = '16, 16, 16, 16' spacing = '8'>
<widget name = 'EnableTabCheckbox'

View file

@ -1006,6 +1006,15 @@
</layout>
</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'>
<layout type = 'vertical' padding = '8, 8, 8, 8' spacing = '6'>
<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>
</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'>
<layout type = 'vertical' padding = '16, 16, 16, 16' spacing = '8'>
<widget name = 'EnableTabCheckbox'

View file

@ -1005,6 +1005,15 @@
</layout>
</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'>
<layout type = 'vertical' padding = '8, 8, 8, 8' spacing = '6'>
<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>
</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'>
<layout type = 'vertical' padding = '16, 16, 16, 16' spacing = '8'>
<widget name = 'EnableTabCheckbox'

View file

@ -1005,6 +1005,15 @@
</layout>
</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'>
<layout type = 'vertical' padding = '8, 8, 8, 8' spacing = '6'>
<widget name = 'EnableTabCheckbox'