From 9584a98ad1402d141bdac3e78ea4015033d90521 Mon Sep 17 00:00:00 2001 From: CamilleLaVey Date: Mon, 14 Sep 2026 16:05:33 -0400 Subject: [PATCH] [common, ui] Refining UI for FX shaders PC --- src/qt_common/config/shared_translation.cpp | 3 +++ src/yuzu/configuration/configure_graphics.cpp | 27 +++++++++++++++++++ .../configure_post_processing.cpp | 6 ++--- 3 files changed, 32 insertions(+), 4 deletions(-) diff --git a/src/qt_common/config/shared_translation.cpp b/src/qt_common/config/shared_translation.cpp index be2f986eaf..51aa8e6a73 100644 --- a/src/qt_common/config/shared_translation.cpp +++ b/src/qt_common/config/shared_translation.cpp @@ -151,6 +151,9 @@ std::unique_ptr InitializeTranslations(QObject* parent) { tr("The anti-aliasing method to use.\nSMAA offers the best quality.\nFXAA " "can produce a more stable picture in lower resolutions.")); INSERT(Settings, post_shader_chain, QString(), QString()); + INSERT(Settings, post_shader_preset, QString(), QString()); + INSERT(Settings, post_shader_enabled, tr("Enable post-processing effects"), + tr("Applies post-processing effects to the final image.")); INSERT(Settings, fullscreen_mode, tr("Fullscreen Mode:"), tr("The method used to render the window in fullscreen.\nBorderless offers the best " "compatibility with the on-screen keyboard that some games request for " diff --git a/src/yuzu/configuration/configure_graphics.cpp b/src/yuzu/configuration/configure_graphics.cpp index f294403397..641f65d82a 100644 --- a/src/yuzu/configuration/configure_graphics.cpp +++ b/src/yuzu/configuration/configure_graphics.cpp @@ -37,6 +37,10 @@ #include "yuzu/configuration/configure_graphics.h" #include "yuzu/configuration/shared_widget.h" +#ifdef HAS_RESHADE +#include "yuzu/configuration/configure_post_processing.h" +#endif + ConfigureGraphics::ConfigureGraphics( const Core::System& system_, std::vector& records_, const std::function& expose_compute_option_, @@ -216,6 +220,12 @@ void ConfigureGraphics::Setup(const ConfigurationShared::Builder& builder) { std::vector hold_api; for (const auto setting : Settings::values.linkage.by_category[Settings::Category::Renderer]) { +#ifndef HAS_RESHADE + if (setting->Id() == Settings::values.post_shader_enabled.Id()) { + continue; + } +#endif + ConfigurationShared::Widget* widget = [&]() { if (setting->Id() == Settings::values.fsr_sharpening_slider.Id()) { // FSR needs a reversed slider and a 0.5 multiplier @@ -295,6 +305,23 @@ void ConfigureGraphics::Setup(const ConfigurationShared::Builder& builder) { // Keep track of the resolution combobox to update other UI tabs that need it resolution_combobox = widget->combobox; hold_graphics.emplace(setting->Id(), widget); +#ifdef HAS_RESHADE + } else if (setting->Id() == Settings::values.post_shader_enabled.Id()) { + QPushButton* post_shader_button = new QPushButton(tr("Configure Effects..."), widget); + post_shader_button->setVisible(widget->checkbox->isChecked()); + + connect(post_shader_button, &QAbstractButton::clicked, this, [this]() { + ConfigurePostProcessing dialog(this); + dialog.exec(); + }); + connect(widget->checkbox, &QCheckBox::toggled, post_shader_button, + &QWidget::setVisible); + + QBoxLayout* row = qobject_cast(widget->layout()); + row->insertWidget(1, post_shader_button); + + hold_graphics.emplace(setting->Id(), widget); +#endif } else { hold_graphics.emplace(setting->Id(), widget); } diff --git a/src/yuzu/configuration/configure_post_processing.cpp b/src/yuzu/configuration/configure_post_processing.cpp index 6fe46da6c5..a1d5619fa9 100644 --- a/src/yuzu/configuration/configure_post_processing.cpp +++ b/src/yuzu/configuration/configure_post_processing.cpp @@ -70,10 +70,8 @@ ConfigurePostProcessing::ConfigurePostProcessing(QWidget* parent) : QDialog(pare auto* root = new QVBoxLayout(this); - auto* description = new QLabel( - tr("ReShade FX effects are loaded from the post_shaders folder in the Eden data " - "directory. Changes apply immediately while a game is running."), - this); + auto* description = + new QLabel(tr("Changes apply immediately while a game is running."), this); description->setWordWrap(true); root->addWidget(description);