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).
system.setGraphicsMode(ConfMan.get("gfx_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.setShader("");
}
system.setScaler(ConfMan.get("scaler").c_str(), ConfMan.getInt("scale_factor"));
system.setShader(ConfMan.get("shader"));
system.initSize(320, 200);

View file

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

View file

@ -103,7 +103,6 @@ enum {
kGraphicsTabContainerReflowCmd = 'gtcr',
kScalerPopUpCmd = 'scPU',
kFullscreenToggled = 'oful',
kScalerToggle = 'sctg',
};
enum {
@ -112,11 +111,6 @@ enum {
kSubtitlesBoth,
};
enum {
kScalerScaler,
kScalerShader,
};
#ifdef USE_FLUIDSYNTH
enum {
kFluidSynthSettingsCmd = 'flst'
@ -203,7 +197,6 @@ void OptionsDialog::init() {
_fullscreenCheckbox = nullptr;
_filteringCheckbox = nullptr;
_aspectCheckbox = nullptr;
_enableShaderSettings = false;
_shader = nullptr;
_shaderButton = nullptr;
_shaderClearButton = nullptr;
@ -357,15 +350,6 @@ void OptionsDialog::build() {
_scalerPopUp->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 (ConfMan.hasKey("scaler", _domain)) {
const PluginList &scalerPlugins = ScalerMan.getPlugins();
@ -608,16 +592,6 @@ void OptionsDialog::apply() {
ConfMan.setBool("aspect_ratio", _aspectCheckbox->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;
if ((int32)_gfxPopUp->getSelectedTag() >= 0) {
@ -739,32 +713,28 @@ void OptionsDialog::apply() {
// Shader options
if (_shader) {
if (_enableShaderSettings) {
bool isSet;
bool isSet;
if (ConfMan.hasKey("shader", _domain) && !ConfMan.get("shader", _domain).empty())
previousShader = ConfMan.get("shader", _domain);
if (ConfMan.hasKey("shader", _domain) && !ConfMan.get("shader", _domain).empty())
previousShader = ConfMan.get("shader", _domain);
Common::U32String shader(_shader->getLabel());
if (shader.empty() || (shader == _c("None", "shader")))
isSet = false;
else
isSet = true;
Common::U32String shader(_shader->getLabel());
if (shader.empty() || (shader == _c("None", "shader")))
isSet = false;
else
isSet = true;
if (isSet) {
if (!ConfMan.hasKey("shader", _domain) || shader != ConfMan.get("shader", _domain))
graphicsModeChanged = true;
ConfMan.set("shader", shader.encode(), _domain);
} else {
if (ConfMan.hasKey("shader", _domain) && !ConfMan.get("shader", _domain).empty())
graphicsModeChanged = true;
ConfMan.removeKey("shader", _domain);
}
_shader->setFontColor(ThemeEngine::FontColor::kFontColorNormal);
if (isSet) {
if (!ConfMan.hasKey("shader", _domain) || shader != ConfMan.get("shader", _domain))
graphicsModeChanged = true;
ConfMan.set("shader", shader.encode(), _domain);
} else {
if (ConfMan.hasKey("shader", _domain) && !ConfMan.get("shader", _domain).empty())
graphicsModeChanged = true;
ConfMan.removeKey("shader", _domain);
}
_shader->setFontColor(ThemeEngine::FontColor::kFontColorNormal);
}
// Setup graphics again if needed
@ -772,16 +742,8 @@ void OptionsDialog::apply() {
g_system->beginGFXTransaction();
g_system->setGraphicsMode(ConfMan.get("gfx_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->setShader("");
}
g_system->setScaler(ConfMan.get("scaler", _domain).c_str(), ConfMan.getInt("scale_factor", _domain));
g_system->setShader(ConfMan.get("shader", _domain));
if (ConfMan.hasKey("aspect_ratio"))
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);
g_gui.scheduleTopDialogRedraw();
break;
case kScalerToggle:
setScalerControls();
break;
case kMidiGainChanged:
_midiGainLabel->setLabel(Common::String::format("%.2f", (double)_midiGainSlider->getValue() / 100.0));
_midiGainLabel->markAsDirty();
@ -1228,14 +1187,10 @@ void OptionsDialog::setGraphicSettingsState(bool enabled) {
_stretchPopUp->setEnabled(false);
}
bool scalerToggle = false;
if (g_system->hasFeature(OSystem::kFeatureScalers)) {
_scalerPopUpDesc->setEnabled(enabled);
_scalerPopUp->setEnabled(enabled);
_scaleFactorPopUp->setEnabled(enabled);
scalerToggle = enabled;
} else {
_scalerPopUpDesc->setEnabled(false);
_scalerPopUp->setEnabled(false);
@ -1246,19 +1201,12 @@ void OptionsDialog::setGraphicSettingsState(bool enabled) {
_shaderButton->setEnabled(enabled);
_shader->setEnabled(enabled);
_shaderClearButton->setEnabled(enabled);
scalerToggle = enabled;
} else {
_scalerPopUpDesc->setEnabled(false);
_scalerPopUp->setEnabled(false);
_scaleFactorPopUp->setEnabled(false);
}
_scalerToggleGroup->setEnabled(scalerToggle);
// Toggle setting based on the radiobutton state
setScalerControls(enabled);
if (g_system->hasFeature(OSystem::kFeatureFilteringMode))
_filteringCheckbox->setEnabled(enabled);
else
@ -1275,21 +1223,6 @@ void OptionsDialog::setGraphicSettingsState(bool 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) {
_enableAudioSettings = enabled;
_midiPopUpDesc->setEnabled(enabled);
@ -1587,15 +1520,9 @@ void OptionsDialog::addGraphicControls(GuiObject *boss, const Common::String &pr
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
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->appendEntry(_("<default>"));
@ -1608,17 +1535,13 @@ void OptionsDialog::addGraphicControls(GuiObject *boss, const Common::String &pr
updateScaleFactors(_scalerPopUp->getSelectedTag());
if (g_system->hasFeature(OSystem::kFeatureShaders)) {
_scalerToggleShaders = new RadiobuttonWidget(boss, prefix + "grShaderRadioButton", _scalerToggleGroup, kScalerShader, Common::U32String(""));
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
_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"));
_shaderClearButton = addClearButton(boss, prefix + "grShaderClearButton", kClearShaderCmd);
_enableShaderSettings = true;
}
// Fullscreen checkbox
@ -1668,30 +1591,6 @@ void OptionsDialog::addGraphicControls(GuiObject *boss, const Common::String &pr
_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) {
// The MIDI mode popup & a label
if (g_system->getOverlayWidth() > 320)
@ -2034,8 +1933,6 @@ void OptionsDialog::setupGraphicsTab() {
_renderModePopUpDesc->setVisible(true);
_renderModePopUp->setVisible(true);
setScalerControls();
if (g_system->hasFeature(OSystem::kFeatureScalers)) {
_scalerPopUpDesc->setVisible(true);
if (ConfMan.isKeyTemporary("scaler") || ConfMan.isKeyTemporary("scale_factor"))
@ -2047,6 +1944,16 @@ void OptionsDialog::setupGraphicsTab() {
_scalerPopUp->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) {

View file

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

View file

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

View file

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

View file

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

View file

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