From f202029d0bdc9546f8f5ca390b2521f79d3359e4 Mon Sep 17 00:00:00 2001 From: "Unknown W. Brackets" Date: Mon, 12 Dec 2022 19:09:14 -0800 Subject: [PATCH] Postshader: Don't save default setting values. This way the defaults can change in the future without problems. --- GPU/Common/PostShader.cpp | 6 ------ GPU/Common/PresentationCommon.cpp | 16 ++++++++++++---- UI/DisplayLayoutScreen.cpp | 7 ++++++- UI/GameSettingsScreen.cpp | 7 ++++++- 4 files changed, 24 insertions(+), 12 deletions(-) diff --git a/GPU/Common/PostShader.cpp b/GPU/Common/PostShader.cpp index a29525b2f4..831bc1bf85 100644 --- a/GPU/Common/PostShader.cpp +++ b/GPU/Common/PostShader.cpp @@ -174,12 +174,6 @@ void LoadPostShaderInfo(Draw::DrawContext *draw, const std::vector &direct section.Get(StringFromFormat("SettingMinValue%d", i + 1).c_str(), &setting.minValue, -1.0f); section.Get(StringFromFormat("SettingMaxValue%d", i + 1).c_str(), &setting.maxValue, 1.0f); section.Get(StringFromFormat("SettingStep%d", i + 1).c_str(), &setting.step, 0.01f); - - // Populate the default setting value. - std::string section = StringFromFormat("%sSettingValue%d", info.section.c_str(), i + 1); - if (!setting.name.empty() && g_Config.mPostShaderSetting.find(section) == g_Config.mPostShaderSetting.end()) { - g_Config.mPostShaderSetting.emplace(section, setting.value); - } } // Let's ignore shaders we can't support. TODO: Not a very good check diff --git a/GPU/Common/PresentationCommon.cpp b/GPU/Common/PresentationCommon.cpp index 00975e72d6..b61ac97503 100644 --- a/GPU/Common/PresentationCommon.cpp +++ b/GPU/Common/PresentationCommon.cpp @@ -172,6 +172,14 @@ void PresentationCommon::GetCardboardSettings(CardboardSettings *cardboardSettin cardboardSettings->screenHeight = cardboardScreenHeight; } +static float GetShaderSettingValue(const ShaderInfo *shaderInfo, int i, const char *nameSuffix) { + std::string key = shaderInfo->section + nameSuffix; + auto it = g_Config.mPostShaderSetting.find(key); + if (it != g_Config.mPostShaderSetting.end()) + return it->second; + return shaderInfo->settings[i].value; +} + void PresentationCommon::CalculatePostShaderUniforms(int bufferWidth, int bufferHeight, int targetWidth, int targetHeight, const ShaderInfo *shaderInfo, PostShaderUniforms *uniforms) const { float u_delta = 1.0f / bufferWidth; float v_delta = 1.0f / bufferHeight; @@ -196,10 +204,10 @@ void PresentationCommon::CalculatePostShaderUniforms(int bufferWidth, int buffer uniforms->gl_HalfPixel[0] = u_pixel_delta * 0.5f; uniforms->gl_HalfPixel[1] = v_pixel_delta * 0.5f; - uniforms->setting[0] = g_Config.mPostShaderSetting[shaderInfo->section + "SettingValue1"]; - uniforms->setting[1] = g_Config.mPostShaderSetting[shaderInfo->section + "SettingValue2"]; - uniforms->setting[2] = g_Config.mPostShaderSetting[shaderInfo->section + "SettingValue3"]; - uniforms->setting[3] = g_Config.mPostShaderSetting[shaderInfo->section + "SettingValue4"]; + uniforms->setting[0] = GetShaderSettingValue(shaderInfo, 0, "SettingValue1"); + uniforms->setting[1] = GetShaderSettingValue(shaderInfo, 1, "SettingValue2"); + uniforms->setting[2] = GetShaderSettingValue(shaderInfo, 2, "SettingValue3"); + uniforms->setting[3] = GetShaderSettingValue(shaderInfo, 3, "SettingValue4"); } static std::string ReadShaderSrc(const Path &filename) { diff --git a/UI/DisplayLayoutScreen.cpp b/UI/DisplayLayoutScreen.cpp index 380208d42c..a554510b28 100644 --- a/UI/DisplayLayoutScreen.cpp +++ b/UI/DisplayLayoutScreen.cpp @@ -418,7 +418,12 @@ void DisplayLayoutScreen::CreateViews() { auto &setting = shaderInfo->settings[i]; if (!setting.name.empty()) { // This map lookup will create the setting in the mPostShaderSetting map if it doesn't exist, with a default value of 0.0. - auto &value = g_Config.mPostShaderSetting[StringFromFormat("%sSettingValue%d", shaderInfo->section.c_str(), i + 1)]; + std::string key = StringFromFormat("%sSettingValue%d", shaderInfo->section.c_str(), i + 1); + bool keyExisted = g_Config.mPostShaderSetting.find(key) != g_Config.mPostShaderSetting.end(); + auto &value = g_Config.mPostShaderSetting[key]; + if (!keyExisted) + value = setting.value; + if (duplicated) { auto sliderName = StringFromFormat("%s %s", ps->T(setting.name), ps->T("(duplicated setting, previous slider will be used)")); PopupSliderChoiceFloat *settingValue = settingContainer->Add(new PopupSliderChoiceFloat(&value, setting.minValue, setting.maxValue, sliderName, setting.step, screenManager())); diff --git a/UI/GameSettingsScreen.cpp b/UI/GameSettingsScreen.cpp index 536a5f4426..16dd2af93a 100644 --- a/UI/GameSettingsScreen.cpp +++ b/UI/GameSettingsScreen.cpp @@ -1817,7 +1817,12 @@ void DeveloperToolsScreen::CreateViews() { for (size_t i = 0; i < ARRAY_SIZE(shaderInfo->settings); ++i) { auto &setting = shaderInfo->settings[i]; if (!setting.name.empty()) { - auto &value = g_Config.mPostShaderSetting[StringFromFormat("%sSettingValue%d", shaderInfo->section.c_str(), i + 1)]; + std::string key = StringFromFormat("%sSettingValue%d", shaderInfo->section.c_str(), i + 1); + bool keyExisted = g_Config.mPostShaderSetting.find(key) != g_Config.mPostShaderSetting.end(); + auto &value = g_Config.mPostShaderSetting[key]; + if (!keyExisted) + value = setting.value; + PopupSliderChoiceFloat *settingValue = list->Add(new PopupSliderChoiceFloat(&value, setting.minValue, setting.maxValue, ps->T(setting.name), setting.step, screenManager())); settingValue->SetEnabledFunc([=] { return !g_Config.bSkipBufferEffects && enableStereo();