From ef7fbf40274b86f05f0fd2386f4c62537ccad6a9 Mon Sep 17 00:00:00 2001 From: Sergio Valor Date: Sat, 2 May 2026 15:12:58 +0200 Subject: [PATCH] =?UTF-8?q?fix(shader):=20force=20passthrough=20quan=20est?= =?UTF-8?q?=C3=A0=20apagat;=20F5/F6=20ignorats=20sense=20shader=20actiu?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- data/ui.yaml | 2 +- source/core/input/global_inputs.cpp | 4 ++++ source/game/options.cpp | 6 ++++++ 3 files changed, 11 insertions(+), 1 deletion(-) diff --git a/data/ui.yaml b/data/ui.yaml index 1854559..3cb4cbf 100644 --- a/data/ui.yaml +++ b/data/ui.yaml @@ -77,7 +77,7 @@ notifier: line_gap: 1 margin_top: 3 border_px: 1 - slide_ms: 400 + slide_ms: 300 slide_in_curve: outCubic slide_out_curve: inCubic diff --git a/source/core/input/global_inputs.cpp b/source/core/input/global_inputs.cpp index a284510..8e2cdba 100644 --- a/source/core/input/global_inputs.cpp +++ b/source/core/input/global_inputs.cpp @@ -89,6 +89,9 @@ namespace GlobalInputs { } void onNextShader() { + // F5/F6 només tenen sentit quan els shaders estan actius. Si no, + // ignorem la pulsació en silenci — l'usuari ha de prémer F4 abans. + if (!Options::video().shader.enabled) { return; } const std::string NEW_NAME = (Options::video().shader.current_shader == "crtpi") ? "postfx" : "crtpi"; Options::setActiveShaderName(NEW_NAME); OptionsApply::reapplyShader(); @@ -98,6 +101,7 @@ namespace GlobalInputs { // Busca l'entrada actual al vector de presets i passa a la següent // (wrap-around). Si no en troba cap s'evita el canvi silenciosament. void onNextPreset() { + if (!Options::video().shader.enabled) { return; } const bool IS_CRTPI = Options::video().shader.current_shader == "crtpi"; std::string new_preset; if (IS_CRTPI) { diff --git a/source/game/options.cpp b/source/game/options.cpp index 441a6ed..1a3933f 100644 --- a/source/game/options.cpp +++ b/source/game/options.cpp @@ -808,6 +808,12 @@ namespace Options { } auto buildActiveShader() -> Rendering::ShaderType { + // Si el shader està deshabilitat, forcem POSTFX. El backend tracta + // POSTFX amb params a zero com a passthrough; CRTPI, en canvi, manté + // el seu pipeline encara amb params buits (no és passthrough), així + // que mai s'ha d'arribar al pipeline de CRTPI quan l'usuari ha apagat + // els shaders, ni des d'F4 ni des del menú de servei. + if (!g_video.shader.enabled) { return Rendering::ShaderType::POSTFX; } if (g_video.shader.current_shader == "crtpi") { return Rendering::ShaderType::CRTPI; }