From 912c2d70e2c96bd0f4de1206cb9dcddd90752c93 Mon Sep 17 00:00:00 2001 From: KojoZero Date: Mon, 4 May 2026 18:26:22 -0700 Subject: [PATCH] opengl linked antialiasing settings and scaling to gui --- src/citra_qt/configuration/config.cpp | 2 + .../configuration/configure_enhancements.cpp | 13 ++++ .../configuration/configure_enhancements.ui | 59 ++++++++++++++++--- src/common/settings.cpp | 14 +++++ src/common/settings.h | 7 +++ .../renderer_opengl/renderer_opengl.cpp | 4 +- 6 files changed, 90 insertions(+), 9 deletions(-) diff --git a/src/citra_qt/configuration/config.cpp b/src/citra_qt/configuration/config.cpp index a5aa9896b..74c4b75f6 100644 --- a/src/citra_qt/configuration/config.cpp +++ b/src/citra_qt/configuration/config.cpp @@ -717,6 +717,7 @@ void QtConfig::ReadRendererValues() { ReadGlobalSetting(Settings::values.bg_blue); ReadGlobalSetting(Settings::values.texture_filter); + ReadGlobalSetting(Settings::values.antialiasing_filter); ReadGlobalSetting(Settings::values.texture_sampling); ReadGlobalSetting(Settings::values.delay_game_render_thread_us); @@ -1261,6 +1262,7 @@ void QtConfig::SaveRendererValues() { WriteGlobalSetting(Settings::values.bg_blue); WriteGlobalSetting(Settings::values.texture_filter); + WriteGlobalSetting(Settings::values.antialiasing_filter); WriteGlobalSetting(Settings::values.texture_sampling); WriteGlobalSetting(Settings::values.delay_game_render_thread_us); diff --git a/src/citra_qt/configuration/configure_enhancements.cpp b/src/citra_qt/configuration/configure_enhancements.cpp index 62afcbb77..bd7961736 100644 --- a/src/citra_qt/configuration/configure_enhancements.cpp +++ b/src/citra_qt/configuration/configure_enhancements.cpp @@ -48,11 +48,17 @@ void ConfigureEnhancements::SetConfiguration() { &Settings::values.texture_filter); ConfigurationShared::SetHighlight(ui->widget_texture_filter, !Settings::values.texture_filter.UsingGlobal()); + ConfigurationShared::SetPerGameSetting(ui->antialiasing_filter_combobox, + &Settings::values.antialiasing_filter); + ConfigurationShared::SetHighlight(ui->widget_antialiasing_filter, + !Settings::values.antialiasing_filter.UsingGlobal()); } else { ui->resolution_factor_combobox->setCurrentIndex( Settings::values.resolution_factor.GetValue()); ui->texture_filter_combobox->setCurrentIndex( static_cast(Settings::values.texture_filter.GetValue())); + ui->antialiasing_filter_combobox->setCurrentIndex( + static_cast(Settings::values.antialiasing_filter.GetValue())); } ui->render_3d_combobox->setCurrentIndex( @@ -132,6 +138,8 @@ void ConfigureEnhancements::ApplyConfiguration() { ui->use_integer_scaling, use_integer_scaling); ConfigurationShared::ApplyPerGameSetting(&Settings::values.texture_filter, ui->texture_filter_combobox); + ConfigurationShared::ApplyPerGameSetting(&Settings::values.antialiasing_filter, + ui->antialiasing_filter_combobox); ConfigurationShared::ApplyPerGameSetting(&Settings::values.dump_textures, ui->toggle_dump_textures, dump_textures); ConfigurationShared::ApplyPerGameSetting(&Settings::values.custom_textures, @@ -150,6 +158,7 @@ void ConfigureEnhancements::SetupPerGameUI() { if (Settings::IsConfiguringGlobal()) { ui->widget_resolution->setEnabled(Settings::values.resolution_factor.UsingGlobal()); ui->widget_texture_filter->setEnabled(Settings::values.texture_filter.UsingGlobal()); + ui->widget_antialiasing_filter->setEnabled(Settings::values.antialiasing_filter.UsingGlobal()); ui->toggle_linear_filter->setEnabled(Settings::values.filter_mode.UsingGlobal()); ui->use_integer_scaling->setEnabled(Settings::values.use_integer_scaling.UsingGlobal()); ui->toggle_dump_textures->setEnabled(Settings::values.dump_textures.UsingGlobal()); @@ -192,4 +201,8 @@ void ConfigureEnhancements::SetupPerGameUI() { ConfigurationShared::SetColoredComboBox( ui->texture_filter_combobox, ui->widget_texture_filter, static_cast(Settings::values.texture_filter.GetValue(true))); + + ConfigurationShared::SetColoredComboBox( + ui->antialiasing_filter_combobox, ui->widget_antialiasing_filter, + static_cast(Settings::values.antialiasing_filter.GetValue(true))); } diff --git a/src/citra_qt/configuration/configure_enhancements.ui b/src/citra_qt/configuration/configure_enhancements.ui index dc3c3deaf..09470fd96 100644 --- a/src/citra_qt/configuration/configure_enhancements.ui +++ b/src/citra_qt/configuration/configure_enhancements.ui @@ -112,12 +112,12 @@ - - Use Integer Scaling - <html><head/><body><p>Use Integer Scaling</p><p>Enforces that the larger screen in all layouts is an integer scale of the 240px height of the original 3DS screen.</p></body></html> + + Use Integer Scaling + @@ -127,6 +127,50 @@ + + + + + 0 + + + 0 + + + 0 + + + 0 + + + + + Anti-Aliasing + + + + + + + + None + + + + + FXAA + + + + + SMAA + + + + + + + @@ -329,12 +373,12 @@ - - Disable Right Eye Rendering - <html><head/><body><p>Disable Right Eye Rendering</p><p>Disables rendering the right eye image when not using stereoscopic mode. Greatly improves performance in some applications, but can cause flickering in others.</p></body></html> + + Disable Right Eye Rendering + @@ -399,7 +443,7 @@ - Qt::Vertical + Qt::Orientation::Vertical @@ -416,6 +460,7 @@ toggle_linear_filter shader_combobox texture_filter_combobox + antialiasing_filter_combobox render_3d_combobox factor_3d mono_rendering_eye diff --git a/src/common/settings.cpp b/src/common/settings.cpp index 2ac231f50..8ceed00fa 100644 --- a/src/common/settings.cpp +++ b/src/common/settings.cpp @@ -57,6 +57,18 @@ std::string_view GetTextureFilterName(TextureFilter filter) { } } +std::string_view GetAntialiasingFilterName(AntiAliasingFilter filter) { + switch (filter) { + case AntiAliasingFilter::None: + return "None"; + case AntiAliasingFilter::FXAA: + return "FXAA"; + case AntiAliasingFilter::SMAA: + return "SMAA"; + default: + return "Invalid"; + } +} std::string_view GetTextureSamplingName(TextureSampling sampling) { switch (sampling) { case TextureSampling::GameControlled: @@ -103,6 +115,7 @@ void LogSettings() { log_setting("Renderer_PostProcessingShader", values.pp_shader_name.GetValue()); log_setting("Renderer_FilterMode", values.filter_mode.GetValue()); log_setting("Renderer_TextureFilter", GetTextureFilterName(values.texture_filter.GetValue())); + log_setting("Renderer_AntialiasingFilter", GetAntialiasingFilterName(values.antialiasing_filter.GetValue())); log_setting("Renderer_TextureSampling", GetTextureSamplingName(values.texture_sampling.GetValue())); log_setting("Renderer_DelayGameRenderThreasUs", values.delay_game_render_thread_us.GetValue()); @@ -213,6 +226,7 @@ void RestoreGlobalState(bool is_powered_on) { values.use_integer_scaling.SetGlobal(true); values.frame_limit.SetGlobal(true); values.texture_filter.SetGlobal(true); + values.antialiasing_filter.SetGlobal(true); values.texture_sampling.SetGlobal(true); values.delay_game_render_thread_us.SetGlobal(true); values.layout_option.SetGlobal(true); diff --git a/src/common/settings.h b/src/common/settings.h index 5eca53421..915719e38 100644 --- a/src/common/settings.h +++ b/src/common/settings.h @@ -112,6 +112,12 @@ enum class TextureFilter : u32 { MMPX = 5, }; +enum class AntiAliasingFilter : u32 { + None = 0, + FXAA = 1, + SMAA = 2, +}; + enum class TextureSampling : u32 { GameControlled = 0, NearestNeighbor = 1, @@ -538,6 +544,7 @@ struct Values { SwitchableSetting frame_limit{100, 0, 1000, Keys::frame_limit}; SwitchableSetting turbo_limit{200, 0, 1000, Keys::turbo_limit}; SwitchableSetting texture_filter{TextureFilter::NoFilter, Keys::texture_filter}; + SwitchableSetting antialiasing_filter{AntiAliasingFilter::None, Keys::antialiasing_filter}; SwitchableSetting texture_sampling{TextureSampling::GameControlled, Keys::texture_sampling}; SwitchableSetting delay_game_render_thread_us{0, 0, 16000, diff --git a/src/video_core/renderer_opengl/renderer_opengl.cpp b/src/video_core/renderer_opengl/renderer_opengl.cpp index 0b5fed4db..bdb7054e0 100644 --- a/src/video_core/renderer_opengl/renderer_opengl.cpp +++ b/src/video_core/renderer_opengl/renderer_opengl.cpp @@ -444,7 +444,7 @@ void RendererOpenGL::InitOpenGLObjects() { screen_info.display_texture = screen_info.texture.resource.handle; } - + AllocatePPTextures(); state.texture_units[0].texture_2d = 0; state.Apply(); } @@ -653,7 +653,7 @@ void RendererOpenGL::DrawSingleScreen(const ScreenInfo& screen_info, float scree } else { scalingMode = 0; } - int antialiasingMode = 2; //0 is none, 1 is FXAA, 2 is SMAA + int antialiasingMode = static_cast(Settings::values.antialiasing_filter.GetValue()); //0 is none, 1 is FXAA, 2 is SMAA if (orientation == Layout::DisplayOrientation::Landscape || orientation == Layout::DisplayOrientation::LandscapeFlipped) { if (textureWidth > screenWidth){ isDownsampling = true;