GUI: Allow both scalers and shaders to be enabled at the same time

This commit is contained in:
Eugene Sandulenko 2022-10-06 15:15:23 +02:00
parent 4e4c149264
commit 57cd169a17
8 changed files with 37 additions and 185 deletions

View file

@ -353,14 +353,8 @@ static void setupGraphics(OSystem &system) {
// Set the user specified graphics mode (if any). // Set the user specified graphics mode (if any).
system.setGraphicsMode(ConfMan.get("gfx_mode").c_str()); system.setGraphicsMode(ConfMan.get("gfx_mode").c_str());
system.setStretchMode(ConfMan.get("stretch_mode").c_str()); system.setStretchMode(ConfMan.get("stretch_mode").c_str());
if (ConfMan.hasKey("useshaders") && ConfMan.get("useshaders") == "shaders") {
system.setScaler(g_system->getDefaultScaler(), g_system->getDefaultScaleFactor());
system.setShader(ConfMan.get("shader"));
} else {
system.setScaler(ConfMan.get("scaler").c_str(), ConfMan.getInt("scale_factor")); system.setScaler(ConfMan.get("scaler").c_str(), ConfMan.getInt("scale_factor"));
system.setShader(""); system.setShader(ConfMan.get("shader"));
}
system.initSize(320, 200); system.initSize(320, 200);

View file

@ -215,17 +215,11 @@ 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 (ConfMan.hasKey("useshaders") && ConfMan.get("useshaders") == "shaders") { if (gameDomain->contains("scaler") || gameDomain->contains("scale_factor"))
if (gameDomain->contains("shader")) {
g_system->setScaler(g_system->getDefaultScaler(), g_system->getDefaultScaleFactor());
g_system->setShader(ConfMan.get("shader"));
}
} else {
if (gameDomain->contains("scaler") || gameDomain->contains("scale_factor")) {
g_system->setScaler(ConfMan.get("scaler").c_str(), ConfMan.getInt("scale_factor")); g_system->setScaler(ConfMan.get("scaler").c_str(), ConfMan.getInt("scale_factor"));
g_system->setShader("");
} if (gameDomain->contains("shader"))
} g_system->setShader(ConfMan.get("shader"));
} }
} }

View file

@ -103,7 +103,6 @@ enum {
kGraphicsTabContainerReflowCmd = 'gtcr', kGraphicsTabContainerReflowCmd = 'gtcr',
kScalerPopUpCmd = 'scPU', kScalerPopUpCmd = 'scPU',
kFullscreenToggled = 'oful', kFullscreenToggled = 'oful',
kScalerToggle = 'sctg',
}; };
enum { enum {
@ -112,11 +111,6 @@ enum {
kSubtitlesBoth, kSubtitlesBoth,
}; };
enum {
kScalerScaler,
kScalerShader,
};
#ifdef USE_FLUIDSYNTH #ifdef USE_FLUIDSYNTH
enum { enum {
kFluidSynthSettingsCmd = 'flst' kFluidSynthSettingsCmd = 'flst'
@ -203,7 +197,6 @@ void OptionsDialog::init() {
_fullscreenCheckbox = nullptr; _fullscreenCheckbox = nullptr;
_filteringCheckbox = nullptr; _filteringCheckbox = nullptr;
_aspectCheckbox = nullptr; _aspectCheckbox = nullptr;
_enableShaderSettings = false;
_shader = nullptr; _shader = nullptr;
_shaderButton = nullptr; _shaderButton = nullptr;
_shaderClearButton = nullptr; _shaderClearButton = nullptr;
@ -357,15 +350,6 @@ void OptionsDialog::build() {
_scalerPopUp->setSelected(0); _scalerPopUp->setSelected(0);
_scaleFactorPopUp->setSelected(0); _scaleFactorPopUp->setSelected(0);
// Set the scaler checkbox value
int scalerVal = kScalerScaler;
if (ConfMan.hasKey("useshaders", _domain) && ConfMan.get("useshaders", _domain) == "shaders")
scalerVal = kScalerShader;
_scalerToggleGroup->setValue(scalerVal);
setScalerControls();
if (g_system->hasFeature(OSystem::kFeatureScalers)) { if (g_system->hasFeature(OSystem::kFeatureScalers)) {
if (ConfMan.hasKey("scaler", _domain)) { if (ConfMan.hasKey("scaler", _domain)) {
const PluginList &scalerPlugins = ScalerMan.getPlugins(); const PluginList &scalerPlugins = ScalerMan.getPlugins();
@ -608,16 +592,6 @@ void OptionsDialog::apply() {
ConfMan.setBool("aspect_ratio", _aspectCheckbox->getState(), _domain); ConfMan.setBool("aspect_ratio", _aspectCheckbox->getState(), _domain);
ConfMan.setBool("vsync", _vsyncCheckbox->getState(), _domain); ConfMan.setBool("vsync", _vsyncCheckbox->getState(), _domain);
Common::String useshaders = "scalers";
if (_scalerToggleGroup->getValue() == kScalerShader)
useshaders = "shaders";
if (ConfMan.get("useshaders", _domain) != useshaders)
graphicsModeChanged = true;
ConfMan.set("useshaders", useshaders, _domain);
bool isSet = false; bool isSet = false;
if ((int32)_gfxPopUp->getSelectedTag() >= 0) { if ((int32)_gfxPopUp->getSelectedTag() >= 0) {
@ -739,7 +713,6 @@ void OptionsDialog::apply() {
// Shader options // Shader options
if (_shader) { if (_shader) {
if (_enableShaderSettings) {
bool isSet; bool isSet;
if (ConfMan.hasKey("shader", _domain) && !ConfMan.get("shader", _domain).empty()) if (ConfMan.hasKey("shader", _domain) && !ConfMan.get("shader", _domain).empty())
@ -762,9 +735,6 @@ void OptionsDialog::apply() {
} }
_shader->setFontColor(ThemeEngine::FontColor::kFontColorNormal); _shader->setFontColor(ThemeEngine::FontColor::kFontColorNormal);
} else {
ConfMan.removeKey("shader", _domain);
}
} }
// Setup graphics again if needed // Setup graphics again if needed
@ -772,16 +742,8 @@ void OptionsDialog::apply() {
g_system->beginGFXTransaction(); g_system->beginGFXTransaction();
g_system->setGraphicsMode(ConfMan.get("gfx_mode", _domain).c_str()); g_system->setGraphicsMode(ConfMan.get("gfx_mode", _domain).c_str());
g_system->setStretchMode(ConfMan.get("stretch_mode", _domain).c_str()); g_system->setStretchMode(ConfMan.get("stretch_mode", _domain).c_str());
if (ConfMan.hasKey("useshaders", _domain) && ConfMan.get("useshaders", _domain) == "shaders") {
g_system->setScaler(g_system->getDefaultScaler(), g_system->getDefaultScaleFactor());
g_system->setShader(ConfMan.get("shader", _domain));
} else {
// THis should stay in the fallback section for allowing more values to the toggle group
g_system->setScaler(ConfMan.get("scaler", _domain).c_str(), ConfMan.getInt("scale_factor", _domain)); g_system->setScaler(ConfMan.get("scaler", _domain).c_str(), ConfMan.getInt("scale_factor", _domain));
g_system->setShader(""); g_system->setShader(ConfMan.get("shader", _domain));
}
if (ConfMan.hasKey("aspect_ratio")) if (ConfMan.hasKey("aspect_ratio"))
g_system->setFeatureState(OSystem::kFeatureAspectRatioCorrection, ConfMan.getBool("aspect_ratio", _domain)); g_system->setFeatureState(OSystem::kFeatureAspectRatioCorrection, ConfMan.getBool("aspect_ratio", _domain));
@ -1090,9 +1052,6 @@ void OptionsDialog::handleCommand(CommandSender *sender, uint32 cmd, uint32 data
_shaderClearButton->setEnabled(false); _shaderClearButton->setEnabled(false);
g_gui.scheduleTopDialogRedraw(); g_gui.scheduleTopDialogRedraw();
break; break;
case kScalerToggle:
setScalerControls();
break;
case kMidiGainChanged: case kMidiGainChanged:
_midiGainLabel->setLabel(Common::String::format("%.2f", (double)_midiGainSlider->getValue() / 100.0)); _midiGainLabel->setLabel(Common::String::format("%.2f", (double)_midiGainSlider->getValue() / 100.0));
_midiGainLabel->markAsDirty(); _midiGainLabel->markAsDirty();
@ -1228,14 +1187,10 @@ void OptionsDialog::setGraphicSettingsState(bool enabled) {
_stretchPopUp->setEnabled(false); _stretchPopUp->setEnabled(false);
} }
bool scalerToggle = false;
if (g_system->hasFeature(OSystem::kFeatureScalers)) { if (g_system->hasFeature(OSystem::kFeatureScalers)) {
_scalerPopUpDesc->setEnabled(enabled); _scalerPopUpDesc->setEnabled(enabled);
_scalerPopUp->setEnabled(enabled); _scalerPopUp->setEnabled(enabled);
_scaleFactorPopUp->setEnabled(enabled); _scaleFactorPopUp->setEnabled(enabled);
scalerToggle = enabled;
} else { } else {
_scalerPopUpDesc->setEnabled(false); _scalerPopUpDesc->setEnabled(false);
_scalerPopUp->setEnabled(false); _scalerPopUp->setEnabled(false);
@ -1246,19 +1201,12 @@ void OptionsDialog::setGraphicSettingsState(bool enabled) {
_shaderButton->setEnabled(enabled); _shaderButton->setEnabled(enabled);
_shader->setEnabled(enabled); _shader->setEnabled(enabled);
_shaderClearButton->setEnabled(enabled); _shaderClearButton->setEnabled(enabled);
scalerToggle = enabled;
} else { } else {
_scalerPopUpDesc->setEnabled(false); _scalerPopUpDesc->setEnabled(false);
_scalerPopUp->setEnabled(false); _scalerPopUp->setEnabled(false);
_scaleFactorPopUp->setEnabled(false); _scaleFactorPopUp->setEnabled(false);
} }
_scalerToggleGroup->setEnabled(scalerToggle);
// Toggle setting based on the radiobutton state
setScalerControls(enabled);
if (g_system->hasFeature(OSystem::kFeatureFilteringMode)) if (g_system->hasFeature(OSystem::kFeatureFilteringMode))
_filteringCheckbox->setEnabled(enabled); _filteringCheckbox->setEnabled(enabled);
else else
@ -1275,21 +1223,6 @@ void OptionsDialog::setGraphicSettingsState(bool enabled) {
_aspectCheckbox->setEnabled(enabled); _aspectCheckbox->setEnabled(enabled);
} }
void OptionsDialog::setShaderSettingsState(bool enabled) {
_enableShaderSettings = enabled;
if (g_system->hasFeature(OSystem::kFeatureShaders)) {
_shader->setEnabled(enabled);
_shaderButton->setEnabled(enabled);
_shaderClearButton->setEnabled(enabled);
if (enabled && !_shader->getLabel().empty() && (_shader->getLabel() != _c("None", "shader")))
_shaderClearButton->setEnabled(enabled);
else
_shaderClearButton->setEnabled(false);
}
}
void OptionsDialog::setAudioSettingsState(bool enabled) { void OptionsDialog::setAudioSettingsState(bool enabled) {
_enableAudioSettings = enabled; _enableAudioSettings = enabled;
_midiPopUpDesc->setEnabled(enabled); _midiPopUpDesc->setEnabled(enabled);
@ -1587,15 +1520,9 @@ void OptionsDialog::addGraphicControls(GuiObject *boss, const Common::String &pr
sm++; sm++;
} }
if (g_system->hasFeature(OSystem::kFeatureShaders)) {
_scalerToggleGroup = new RadiobuttonGroup(boss, kScalerToggle);
_scalerToggleScalers = new RadiobuttonWidget(boss, prefix + "grScalerRadioButton", _scalerToggleGroup, kScalerScaler, Common::U32String(""));
}
// The Scaler popup // The Scaler popup
const PluginList &scalerPlugins = ScalerMan.getPlugins(); const PluginList &scalerPlugins = ScalerMan.getPlugins();
_scalerPopUpDesc = new StaticTextWidget(boss, prefix + "grScalerPopupDesc", _("Use scaler:")); _scalerPopUpDesc = new StaticTextWidget(boss, prefix + "grScalerPopupDesc", _("Scaler:"));
_scalerPopUp = new PopUpWidget(boss, prefix + "grScalerPopup", Common::U32String(), kScalerPopUpCmd); _scalerPopUp = new PopUpWidget(boss, prefix + "grScalerPopup", Common::U32String(), kScalerPopUpCmd);
_scalerPopUp->appendEntry(_("<default>")); _scalerPopUp->appendEntry(_("<default>"));
@ -1608,17 +1535,13 @@ void OptionsDialog::addGraphicControls(GuiObject *boss, const Common::String &pr
updateScaleFactors(_scalerPopUp->getSelectedTag()); updateScaleFactors(_scalerPopUp->getSelectedTag());
if (g_system->hasFeature(OSystem::kFeatureShaders)) { if (g_system->hasFeature(OSystem::kFeatureShaders)) {
_scalerToggleShaders = new RadiobuttonWidget(boss, prefix + "grShaderRadioButton", _scalerToggleGroup, kScalerShader, Common::U32String(""));
if (g_system->getOverlayWidth() > 320) if (g_system->getOverlayWidth() > 320)
_shaderButton = new ButtonWidget(boss, prefix + "grShaderButton", _("Use Shader:"), _("Specifies path to the shader used for scaling the game screen"), kChooseShaderCmd); _shaderButton = new ButtonWidget(boss, prefix + "grShaderButton", _("Shader:"), _("Specifies path to the shader used for scaling the game screen"), kChooseShaderCmd);
else else
_shaderButton = new ButtonWidget(boss, prefix + "grShaderButton", _c("Shader Path:", "lowres"), _("Specifies path to the shader used for scaling the game screen"), kChooseShaderCmd); _shaderButton = new ButtonWidget(boss, prefix + "grShaderButton", _c("Shader Path:", "lowres"), _("Specifies path to the shader used for scaling the game screen"), kChooseShaderCmd);
_shader = new StaticTextWidget(boss, prefix + "grShader", _c("None", "shader"), _("Specifies path to the shader used for scaling the game screen")); _shader = new StaticTextWidget(boss, prefix + "grShader", _c("None", "shader"), _("Specifies path to the shader used for scaling the game screen"));
_shaderClearButton = addClearButton(boss, prefix + "grShaderClearButton", kClearShaderCmd); _shaderClearButton = addClearButton(boss, prefix + "grShaderClearButton", kClearShaderCmd);
_enableShaderSettings = true;
} }
// Fullscreen checkbox // Fullscreen checkbox
@ -1668,30 +1591,6 @@ void OptionsDialog::addGraphicControls(GuiObject *boss, const Common::String &pr
_enableGraphicSettings = true; _enableGraphicSettings = true;
} }
void OptionsDialog::setScalerControls(bool enabled) {
bool scalers, shaders;
if (_scalerToggleGroup->getValue() == kScalerScaler) {
scalers = true;
shaders = false;
} else {
scalers = false;
shaders = true;
}
if (!enabled) {
scalers = shaders = false;
}
_scalerPopUpDesc->setEnabled(scalers);
_scalerPopUp->setEnabled(scalers);
_scaleFactorPopUp->setEnabled(scalers);
_shaderButton->setEnabled(shaders);
_shader->setEnabled(shaders);
_shaderClearButton->setEnabled(shaders);
}
void OptionsDialog::addAudioControls(GuiObject *boss, const Common::String &prefix) { void OptionsDialog::addAudioControls(GuiObject *boss, const Common::String &prefix) {
// The MIDI mode popup & a label // The MIDI mode popup & a label
if (g_system->getOverlayWidth() > 320) if (g_system->getOverlayWidth() > 320)
@ -2034,8 +1933,6 @@ void OptionsDialog::setupGraphicsTab() {
_renderModePopUpDesc->setVisible(true); _renderModePopUpDesc->setVisible(true);
_renderModePopUp->setVisible(true); _renderModePopUp->setVisible(true);
setScalerControls();
if (g_system->hasFeature(OSystem::kFeatureScalers)) { if (g_system->hasFeature(OSystem::kFeatureScalers)) {
_scalerPopUpDesc->setVisible(true); _scalerPopUpDesc->setVisible(true);
if (ConfMan.isKeyTemporary("scaler") || ConfMan.isKeyTemporary("scale_factor")) if (ConfMan.isKeyTemporary("scaler") || ConfMan.isKeyTemporary("scale_factor"))
@ -2047,6 +1944,16 @@ void OptionsDialog::setupGraphicsTab() {
_scalerPopUp->setVisible(false); _scalerPopUp->setVisible(false);
_scaleFactorPopUp->setVisible(false); _scaleFactorPopUp->setVisible(false);
} }
if (g_system->hasFeature(OSystem::kFeatureShaders)) {
_shaderButton->setVisible(true);
_shader->setVisible(true);
_shaderClearButton->setVisible(true);
} else {
_shaderButton->setVisible(false);
_shader->setVisible(false);
_shaderClearButton->setVisible(false);
}
} }
void OptionsDialog::updateScaleFactors(uint32 tag) { void OptionsDialog::updateScaleFactors(uint32 tag) {

View file

@ -102,7 +102,6 @@ protected:
void addSubtitleControls(GuiObject *boss, const Common::String &prefix, int maxSliderVal = 255); void addSubtitleControls(GuiObject *boss, const Common::String &prefix, int maxSliderVal = 255);
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);
@ -115,8 +114,6 @@ protected:
bool loadMusicDeviceSetting(PopUpWidget *popup, Common::String setting, MusicType preferredType = MT_AUTO); bool loadMusicDeviceSetting(PopUpWidget *popup, Common::String setting, MusicType preferredType = MT_AUTO);
void saveMusicDeviceSetting(PopUpWidget *popup, Common::String setting); void saveMusicDeviceSetting(PopUpWidget *popup, Common::String setting);
void setScalerControls(bool enabled = true);
TabWidget *_tabWidget; TabWidget *_tabWidget;
int _graphicsTabId; int _graphicsTabId;
int _midiTabId; int _midiTabId;
@ -154,9 +151,6 @@ private:
PopUpWidget *_gfxPopUp; PopUpWidget *_gfxPopUp;
StaticTextWidget *_stretchPopUpDesc; StaticTextWidget *_stretchPopUpDesc;
PopUpWidget *_stretchPopUp; PopUpWidget *_stretchPopUp;
RadiobuttonGroup *_scalerToggleGroup;
RadiobuttonWidget *_scalerToggleScalers;
RadiobuttonWidget *_scalerToggleShaders;
StaticTextWidget *_scalerPopUpDesc; StaticTextWidget *_scalerPopUpDesc;
PopUpWidget *_scalerPopUp, *_scaleFactorPopUp; PopUpWidget *_scalerPopUp, *_scaleFactorPopUp;
ButtonWidget *_shaderButton; ButtonWidget *_shaderButton;
@ -171,11 +165,6 @@ private:
StaticTextWidget *_renderModePopUpDesc; StaticTextWidget *_renderModePopUpDesc;
PopUpWidget *_renderModePopUp; PopUpWidget *_renderModePopUp;
//
// Shader controls
//
bool _enableShaderSettings;
// //
// Audio controls // Audio controls
// //

View file

@ -489,10 +489,6 @@
/> />
</layout> </layout>
<layout type = 'horizontal' padding = '0, 0, 0, 0' spacing = '10' align = 'center'> <layout type = 'horizontal' padding = '0, 0, 0, 0' spacing = '10' align = 'center'>
<widget name = 'grScalerRadioButton'
type = 'Radiobutton'
width = '20'
/>
<widget name = 'grScalerPopupDesc' <widget name = 'grScalerPopupDesc'
type = 'OptionsLabel' type = 'OptionsLabel'
/> />
@ -504,10 +500,6 @@
/> />
</layout> </layout>
<layout type = 'horizontal' padding = '0, 0, 0, 0' spacing = '10' align = 'center'> <layout type = 'horizontal' padding = '0, 0, 0, 0' spacing = '10' align = 'center'>
<widget name = 'grShaderRadioButton'
type = 'Radiobutton'
width = '20'
/>
<widget name = 'grShaderButton' <widget name = 'grShaderButton'
type = 'Button' type = 'Button'
/> />

View file

@ -428,10 +428,6 @@
/> />
</layout> </layout>
<layout type = 'horizontal' padding = '0, 0, 0, 0' spacing = '6' align = 'center'> <layout type = 'horizontal' padding = '0, 0, 0, 0' spacing = '6' align = 'center'>
<widget name = 'grScalerRadioButton'
type = 'Radiobutton'
width = '10'
/>
<widget name = 'grScalerPopupDesc' <widget name = 'grScalerPopupDesc'
type = 'OptionsLabel' type = 'OptionsLabel'
/> />
@ -443,10 +439,6 @@
/> />
</layout> </layout>
<layout type = 'horizontal' padding = '0, 0, 0, 0' spacing = '10' align = 'center'> <layout type = 'horizontal' padding = '0, 0, 0, 0' spacing = '10' align = 'center'>
<widget name = 'grShaderRadioButton'
type = 'Radiobutton'
width = '10'
/>
<widget name = 'grShaderButton' <widget name = 'grShaderButton'
type = 'Button' type = 'Button'
/> />

View file

@ -341,10 +341,6 @@
/> />
</layout> </layout>
<layout type = 'horizontal' padding = '0, 0, 0, 0' spacing = '10' align = 'center'> <layout type = 'horizontal' padding = '0, 0, 0, 0' spacing = '10' align = 'center'>
<widget name = 'grScalerRadioButton'
type = 'Radiobutton'
width = '20'
/>
<widget name = 'grScalerPopupDesc' <widget name = 'grScalerPopupDesc'
type = 'OptionsLabel' type = 'OptionsLabel'
/> />
@ -356,10 +352,6 @@
/> />
</layout> </layout>
<layout type = 'horizontal' padding = '0, 0, 0, 0' spacing = '10' align = 'center'> <layout type = 'horizontal' padding = '0, 0, 0, 0' spacing = '10' align = 'center'>
<widget name = 'grShaderRadioButton'
type = 'Radiobutton'
width = '20'
/>
<widget name = 'grShaderButton' <widget name = 'grShaderButton'
type = 'Button' type = 'Button'
/> />

View file

@ -342,10 +342,6 @@
/> />
</layout> </layout>
<layout type = 'horizontal' padding = '0, 0, 0, 0' spacing = '6' align = 'center'> <layout type = 'horizontal' padding = '0, 0, 0, 0' spacing = '6' align = 'center'>
<widget name = 'grScalerRadioButton'
type = 'Radiobutton'
width = '10'
/>
<widget name = 'grScalerPopupDesc' <widget name = 'grScalerPopupDesc'
type = 'OptionsLabel' type = 'OptionsLabel'
/> />
@ -357,10 +353,6 @@
/> />
</layout> </layout>
<layout type = 'horizontal' padding = '0, 0, 0, 0' spacing = '6' align = 'center'> <layout type = 'horizontal' padding = '0, 0, 0, 0' spacing = '6' align = 'center'>
<widget name = 'grShaderRadioButton'
type = 'Radiobutton'
width = '10'
/>
<widget name = 'grShaderButton' <widget name = 'grShaderButton'
type = 'Button' type = 'Button'
/> />