GUI: Allow shaders to be selected for individual targets
This commit is contained in:
parent
626c200d03
commit
7488e17c0a
21 changed files with 149 additions and 31 deletions
|
@ -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);
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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"));
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -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;
|
||||
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -84,6 +84,7 @@ protected:
|
|||
PopUpWidget *_platformPopUp;
|
||||
|
||||
CheckboxWidget *_globalGraphicsOverride;
|
||||
CheckboxWidget *_globalShaderOverride;
|
||||
CheckboxWidget *_globalAudioOverride;
|
||||
CheckboxWidget *_globalMIDIOverride;
|
||||
CheckboxWidget *_globalMT32Override;
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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.
|
@ -1 +1 @@
|
|||
[SCUMMVM_STX0.8.34:ScummVM Classic Theme:No Author]
|
||||
[SCUMMVM_STX0.8.35:ScummVM Classic Theme:No Author]
|
||||
|
|
|
@ -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'
|
||||
|
|
|
@ -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.
|
@ -1 +1 @@
|
|||
[SCUMMVM_STX0.8.34:ScummVM Modern Theme:No Author]
|
||||
[SCUMMVM_STX0.8.35:ScummVM Modern Theme:No Author]
|
||||
|
|
|
@ -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'
|
||||
|
|
|
@ -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.
|
@ -1 +1 @@
|
|||
[SCUMMVM_STX0.8.34:ScummVM Modern Theme Remastered:No Author]
|
||||
[SCUMMVM_STX0.8.35:ScummVM Modern Theme Remastered:No Author]
|
||||
|
|
|
@ -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'
|
||||
|
|
|
@ -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'
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue