diff options
| author | JMC47 <JMC4789@gmail.com> | 2022-12-09 01:13:42 -0500 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2022-12-09 01:13:42 -0500 |
| commit | d250e69ddff41db2910f38e741cf3f57d07b362c (patch) | |
| tree | ef1fe420b8ef32ccbcacd44197ce0ab42bd9059d /Source/Core/DolphinQt/Config/Graphics/EnhancementsWidget.cpp | |
| parent | abf08b586999910a7fad7cc2fd07dcbd266832a5 (diff) | |
| parent | 1d199f466443b6aba7906b1fd4dfd95e87bfada8 (diff) | |
Merge pull request #11276 from AdmiralCurtiss/texture-filter-options
Core: Add option to force linear texture filtering.
Diffstat (limited to 'Source/Core/DolphinQt/Config/Graphics/EnhancementsWidget.cpp')
| -rw-r--r-- | Source/Core/DolphinQt/Config/Graphics/EnhancementsWidget.cpp | 195 |
1 files changed, 157 insertions, 38 deletions
diff --git a/Source/Core/DolphinQt/Config/Graphics/EnhancementsWidget.cpp b/Source/Core/DolphinQt/Config/Graphics/EnhancementsWidget.cpp index db5655cb77..dd1d67b04b 100644 --- a/Source/Core/DolphinQt/Config/Graphics/EnhancementsWidget.cpp +++ b/Source/Core/DolphinQt/Config/Graphics/EnhancementsWidget.cpp @@ -16,6 +16,7 @@ #include "DolphinQt/Config/Graphics/GraphicsBool.h" #include "DolphinQt/Config/Graphics/GraphicsChoice.h" +#include "DolphinQt/Config/Graphics/GraphicsRadio.h" #include "DolphinQt/Config/Graphics/GraphicsSlider.h" #include "DolphinQt/Config/Graphics/GraphicsWindow.h" #include "DolphinQt/Config/Graphics/PostProcessingConfigWindow.h" @@ -39,6 +40,18 @@ EnhancementsWidget::EnhancementsWidget(GraphicsWindow* parent) : m_block_save(fa [this](const QString& backend) { LoadSettings(); }); } +constexpr int TEXTURE_FILTERING_DEFAULT = 0; +constexpr int TEXTURE_FILTERING_ANISO_2X = 1; +constexpr int TEXTURE_FILTERING_ANISO_4X = 2; +constexpr int TEXTURE_FILTERING_ANISO_8X = 3; +constexpr int TEXTURE_FILTERING_ANISO_16X = 4; +constexpr int TEXTURE_FILTERING_FORCE_NEAREST = 5; +constexpr int TEXTURE_FILTERING_FORCE_LINEAR = 6; +constexpr int TEXTURE_FILTERING_FORCE_LINEAR_ANISO_2X = 7; +constexpr int TEXTURE_FILTERING_FORCE_LINEAR_ANISO_4X = 8; +constexpr int TEXTURE_FILTERING_FORCE_LINEAR_ANISO_8X = 9; +constexpr int TEXTURE_FILTERING_FORCE_LINEAR_ANISO_16X = 10; + void EnhancementsWidget::CreateWidgets() { auto* main_layout = new QVBoxLayout; @@ -73,16 +86,30 @@ void EnhancementsWidget::CreateWidgets() m_ir_combo->setMaxVisibleItems(visible_resolution_option_count); m_aa_combo = new ToolTipComboBox(); - m_af_combo = new GraphicsChoice({tr("1x"), tr("2x"), tr("4x"), tr("8x"), tr("16x")}, - Config::GFX_ENHANCE_MAX_ANISOTROPY); + + m_texture_filtering_combo = new ToolTipComboBox(); + m_texture_filtering_combo->addItem(tr("Default"), TEXTURE_FILTERING_DEFAULT); + m_texture_filtering_combo->addItem(tr("2x Anisotropic"), TEXTURE_FILTERING_ANISO_2X); + m_texture_filtering_combo->addItem(tr("4x Anisotropic"), TEXTURE_FILTERING_ANISO_4X); + m_texture_filtering_combo->addItem(tr("8x Anisotropic"), TEXTURE_FILTERING_ANISO_8X); + m_texture_filtering_combo->addItem(tr("16x Anisotropic"), TEXTURE_FILTERING_ANISO_16X); + m_texture_filtering_combo->addItem(tr("Force Nearest"), TEXTURE_FILTERING_FORCE_NEAREST); + m_texture_filtering_combo->addItem(tr("Force Linear"), TEXTURE_FILTERING_FORCE_LINEAR); + m_texture_filtering_combo->addItem(tr("Force Linear and 2x Anisotropic"), + TEXTURE_FILTERING_FORCE_LINEAR_ANISO_2X); + m_texture_filtering_combo->addItem(tr("Force Linear and 4x Anisotropic"), + TEXTURE_FILTERING_FORCE_LINEAR_ANISO_4X); + m_texture_filtering_combo->addItem(tr("Force Linear and 8x Anisotropic"), + TEXTURE_FILTERING_FORCE_LINEAR_ANISO_8X); + m_texture_filtering_combo->addItem(tr("Force Linear and 16x Anisotropic"), + TEXTURE_FILTERING_FORCE_LINEAR_ANISO_16X); m_pp_effect = new ToolTipComboBox(); m_configure_pp_effect = new NonDefaultQPushButton(tr("Configure")); m_scaled_efb_copy = new GraphicsBool(tr("Scaled EFB Copy"), Config::GFX_HACK_COPY_EFB_SCALED); m_per_pixel_lighting = new GraphicsBool(tr("Per-Pixel Lighting"), Config::GFX_ENABLE_PIXEL_LIGHTING); - m_force_texture_filtering = - new GraphicsBool(tr("Force Texture Filtering"), Config::GFX_ENHANCE_FORCE_FILTERING); + m_widescreen_hack = new GraphicsBool(tr("Widescreen Hack"), Config::GFX_WIDESCREEN_HACK); m_disable_fog = new GraphicsBool(tr("Disable Fog"), Config::GFX_DISABLE_FOG); m_force_24bit_color = @@ -92,25 +119,38 @@ void EnhancementsWidget::CreateWidgets() m_arbitrary_mipmap_detection = new GraphicsBool(tr("Arbitrary Mipmap Detection"), Config::GFX_ENHANCE_ARBITRARY_MIPMAP_DETECTION); - enhancements_layout->addWidget(new QLabel(tr("Internal Resolution:")), 0, 0); - enhancements_layout->addWidget(m_ir_combo, 0, 1, 1, -1); - enhancements_layout->addWidget(new QLabel(tr("Anti-Aliasing:")), 1, 0); - enhancements_layout->addWidget(m_aa_combo, 1, 1, 1, -1); - enhancements_layout->addWidget(new QLabel(tr("Anisotropic Filtering:")), 2, 0); - enhancements_layout->addWidget(m_af_combo, 2, 1, 1, -1); - - enhancements_layout->addWidget(new QLabel(tr("Post-Processing Effect:")), 4, 0); - enhancements_layout->addWidget(m_pp_effect, 4, 1); - enhancements_layout->addWidget(m_configure_pp_effect, 4, 2); - - enhancements_layout->addWidget(m_scaled_efb_copy, 5, 0); - enhancements_layout->addWidget(m_per_pixel_lighting, 5, 1); - enhancements_layout->addWidget(m_force_texture_filtering, 6, 0); - enhancements_layout->addWidget(m_widescreen_hack, 6, 1); - enhancements_layout->addWidget(m_disable_fog, 7, 0); - enhancements_layout->addWidget(m_force_24bit_color, 7, 1); - enhancements_layout->addWidget(m_disable_copy_filter, 8, 0); - enhancements_layout->addWidget(m_arbitrary_mipmap_detection, 8, 1); + int row = 0; + enhancements_layout->addWidget(new QLabel(tr("Internal Resolution:")), row, 0); + enhancements_layout->addWidget(m_ir_combo, row, 1, 1, -1); + ++row; + + enhancements_layout->addWidget(new QLabel(tr("Anti-Aliasing:")), row, 0); + enhancements_layout->addWidget(m_aa_combo, row, 1, 1, -1); + ++row; + + enhancements_layout->addWidget(new QLabel(tr("Texture Filtering:")), row, 0); + enhancements_layout->addWidget(m_texture_filtering_combo, row, 1, 1, -1); + ++row; + + enhancements_layout->addWidget(new QLabel(tr("Post-Processing Effect:")), row, 0); + enhancements_layout->addWidget(m_pp_effect, row, 1); + enhancements_layout->addWidget(m_configure_pp_effect, row, 2); + ++row; + + enhancements_layout->addWidget(m_scaled_efb_copy, row, 0); + enhancements_layout->addWidget(m_per_pixel_lighting, row, 1, 1, -1); + ++row; + + enhancements_layout->addWidget(m_widescreen_hack, row, 0); + enhancements_layout->addWidget(m_force_24bit_color, row, 1, 1, -1); + ++row; + + enhancements_layout->addWidget(m_disable_fog, row, 0); + enhancements_layout->addWidget(m_arbitrary_mipmap_detection, row, 1, 1, -1); + ++row; + + enhancements_layout->addWidget(m_disable_copy_filter, row, 0); + ++row; // Stereoscopy auto* stereoscopy_box = new QGroupBox(tr("Stereoscopy")); @@ -144,6 +184,8 @@ void EnhancementsWidget::ConnectWidgets() { connect(m_aa_combo, qOverload<int>(&QComboBox::currentIndexChanged), [this](int) { SaveSettings(); }); + connect(m_texture_filtering_combo, qOverload<int>(&QComboBox::currentIndexChanged), + [this](int) { SaveSettings(); }); connect(m_pp_effect, qOverload<int>(&QComboBox::currentIndexChanged), [this](int) { SaveSettings(); }); connect(m_3d_mode, qOverload<int>(&QComboBox::currentIndexChanged), [this] { @@ -218,8 +260,11 @@ void EnhancementsWidget::LoadSettings() m_block_save = true; // Anti-Aliasing - int aa_selection = Config::Get(Config::GFX_MSAA); - bool ssaa = Config::Get(Config::GFX_SSAA); + const int aa_selection = Config::Get(Config::GFX_MSAA); + const bool ssaa = Config::Get(Config::GFX_SSAA); + const int aniso = Config::Get(Config::GFX_ENHANCE_MAX_ANISOTROPY); + const TextureFilteringMode tex_filter_mode = + Config::Get(Config::GFX_ENHANCE_FORCE_TEXTURE_FILTERING); m_aa_combo->clear(); for (const auto& option : VideoUtils::GetAvailableAntialiasingModes(m_msaa_modes)) @@ -229,6 +274,25 @@ void EnhancementsWidget::LoadSettings() QString::fromStdString(std::to_string(aa_selection) + "x " + (ssaa ? "SSAA" : "MSAA"))); m_aa_combo->setEnabled(m_aa_combo->count() > 1); + switch (tex_filter_mode) + { + case TextureFilteringMode::Default: + if (aniso >= 0 && aniso <= 4) + m_texture_filtering_combo->setCurrentIndex(aniso); + else + m_texture_filtering_combo->setCurrentIndex(TEXTURE_FILTERING_DEFAULT); + break; + case TextureFilteringMode::Nearest: + m_texture_filtering_combo->setCurrentIndex(TEXTURE_FILTERING_FORCE_NEAREST); + break; + case TextureFilteringMode::Linear: + if (aniso >= 0 && aniso <= 4) + m_texture_filtering_combo->setCurrentIndex(TEXTURE_FILTERING_FORCE_LINEAR + aniso); + else + m_texture_filtering_combo->setCurrentIndex(TEXTURE_FILTERING_FORCE_LINEAR); + break; + } + // Post Processing Shader LoadPPShaders(); @@ -264,6 +328,66 @@ void EnhancementsWidget::SaveSettings() Config::SetBaseOrCurrent(Config::GFX_SSAA, is_ssaa); + const int texture_filtering_selection = m_texture_filtering_combo->currentData().toInt(); + switch (texture_filtering_selection) + { + case TEXTURE_FILTERING_DEFAULT: + Config::SetBaseOrCurrent(Config::GFX_ENHANCE_MAX_ANISOTROPY, 0); + Config::SetBaseOrCurrent(Config::GFX_ENHANCE_FORCE_TEXTURE_FILTERING, + TextureFilteringMode::Default); + break; + case TEXTURE_FILTERING_ANISO_2X: + Config::SetBaseOrCurrent(Config::GFX_ENHANCE_MAX_ANISOTROPY, 1); + Config::SetBaseOrCurrent(Config::GFX_ENHANCE_FORCE_TEXTURE_FILTERING, + TextureFilteringMode::Default); + break; + case TEXTURE_FILTERING_ANISO_4X: + Config::SetBaseOrCurrent(Config::GFX_ENHANCE_MAX_ANISOTROPY, 2); + Config::SetBaseOrCurrent(Config::GFX_ENHANCE_FORCE_TEXTURE_FILTERING, + TextureFilteringMode::Default); + break; + case TEXTURE_FILTERING_ANISO_8X: + Config::SetBaseOrCurrent(Config::GFX_ENHANCE_MAX_ANISOTROPY, 3); + Config::SetBaseOrCurrent(Config::GFX_ENHANCE_FORCE_TEXTURE_FILTERING, + TextureFilteringMode::Default); + break; + case TEXTURE_FILTERING_ANISO_16X: + Config::SetBaseOrCurrent(Config::GFX_ENHANCE_MAX_ANISOTROPY, 4); + Config::SetBaseOrCurrent(Config::GFX_ENHANCE_FORCE_TEXTURE_FILTERING, + TextureFilteringMode::Default); + break; + case TEXTURE_FILTERING_FORCE_NEAREST: + Config::SetBaseOrCurrent(Config::GFX_ENHANCE_MAX_ANISOTROPY, 0); + Config::SetBaseOrCurrent(Config::GFX_ENHANCE_FORCE_TEXTURE_FILTERING, + TextureFilteringMode::Nearest); + break; + case TEXTURE_FILTERING_FORCE_LINEAR: + Config::SetBaseOrCurrent(Config::GFX_ENHANCE_MAX_ANISOTROPY, 0); + Config::SetBaseOrCurrent(Config::GFX_ENHANCE_FORCE_TEXTURE_FILTERING, + TextureFilteringMode::Linear); + break; + case TEXTURE_FILTERING_FORCE_LINEAR_ANISO_2X: + Config::SetBaseOrCurrent(Config::GFX_ENHANCE_MAX_ANISOTROPY, 1); + Config::SetBaseOrCurrent(Config::GFX_ENHANCE_FORCE_TEXTURE_FILTERING, + TextureFilteringMode::Linear); + break; + case TEXTURE_FILTERING_FORCE_LINEAR_ANISO_4X: + Config::SetBaseOrCurrent(Config::GFX_ENHANCE_MAX_ANISOTROPY, 2); + Config::SetBaseOrCurrent(Config::GFX_ENHANCE_FORCE_TEXTURE_FILTERING, + TextureFilteringMode::Linear); + break; + case TEXTURE_FILTERING_FORCE_LINEAR_ANISO_8X: + Config::SetBaseOrCurrent(Config::GFX_ENHANCE_MAX_ANISOTROPY, 3); + Config::SetBaseOrCurrent(Config::GFX_ENHANCE_FORCE_TEXTURE_FILTERING, + TextureFilteringMode::Linear); + break; + case TEXTURE_FILTERING_FORCE_LINEAR_ANISO_16X: + Config::SetBaseOrCurrent(Config::GFX_ENHANCE_MAX_ANISOTROPY, 4); + Config::SetBaseOrCurrent(Config::GFX_ENHANCE_FORCE_TEXTURE_FILTERING, + TextureFilteringMode::Linear); + break; + } + const bool anaglyph = g_Config.stereo_mode == StereoMode::Anaglyph; const bool passive = g_Config.stereo_mode == StereoMode::Passive; Config::SetBaseOrCurrent(Config::GFX_ENHANCE_POST_SHADER, @@ -300,10 +424,12 @@ void EnhancementsWidget::AddDescriptions() "geometry anti-aliasing and also applies anti-aliasing to lighting, shader " "effects, and textures.<br><br><dolphin_emphasis>If unsure, select " "None.</dolphin_emphasis>"); - static const char TR_ANISOTROPIC_FILTERING_DESCRIPTION[] = QT_TR_NOOP( - "Enables anisotropic filtering, which enhances the visual quality of textures that " - "are at oblique viewing angles.<br><br>Might cause issues in a small " - "number of games.<br><br><dolphin_emphasis>If unsure, select 1x.</dolphin_emphasis>"); + static const char TR_FORCE_TEXTURE_FILTERING_DESCRIPTION[] = QT_TR_NOOP( + "Adjust the texture filtering. Anisotropic filtering enhances the visual quality of textures " + "that are at oblique viewing angles. Force Nearest and Force Linear override the texture " + "scaling filter selected by the game.<br><br>Any option except 'Default' will alter the look " + "of the game's textures and might cause issues in a small number of " + "games.<br><br><dolphin_emphasis>If unsure, select 'Default'.</dolphin_emphasis>"); static const char TR_POSTPROCESSING_DESCRIPTION[] = QT_TR_NOOP("Applies a post-processing effect after rendering a frame.<br><br " "/><dolphin_emphasis>If unsure, select (off).</dolphin_emphasis>"); @@ -352,11 +478,6 @@ void EnhancementsWidget::AddDescriptions() "quality by reducing color banding.<br><br>Has no impact on performance and causes " "few graphical issues.<br><br><dolphin_emphasis>If unsure, leave this " "checked.</dolphin_emphasis>"); - static const char TR_FORCE_TEXTURE_FILTERING_DESCRIPTION[] = - QT_TR_NOOP("Filters all textures, including any that the game explicitly set as " - "unfiltered.<br><br>May improve quality of certain textures in some games, but " - "will cause issues in others.<br><br><dolphin_emphasis>If unsure, leave this " - "unchecked.</dolphin_emphasis>"); static const char TR_DISABLE_COPY_FILTER_DESCRIPTION[] = QT_TR_NOOP( "Disables the blending of adjacent rows when copying the EFB. This is known in " "some games as \"deflickering\" or \"smoothing\".<br><br>Disabling the filter has no " @@ -378,8 +499,8 @@ void EnhancementsWidget::AddDescriptions() m_aa_combo->SetTitle(tr("Anti-Aliasing")); m_aa_combo->SetDescription(tr(TR_ANTIALIAS_DESCRIPTION)); - m_af_combo->SetTitle(tr("Anisotropic Filtering")); - m_af_combo->SetDescription(tr(TR_ANISOTROPIC_FILTERING_DESCRIPTION)); + m_texture_filtering_combo->SetTitle(tr("Texture Filtering")); + m_texture_filtering_combo->SetDescription(tr(TR_FORCE_TEXTURE_FILTERING_DESCRIPTION)); m_pp_effect->SetTitle(tr("Post-Processing Effect")); m_pp_effect->SetDescription(tr(TR_POSTPROCESSING_DESCRIPTION)); @@ -394,8 +515,6 @@ void EnhancementsWidget::AddDescriptions() m_force_24bit_color->SetDescription(tr(TR_FORCE_24BIT_DESCRIPTION)); - m_force_texture_filtering->SetDescription(tr(TR_FORCE_TEXTURE_FILTERING_DESCRIPTION)); - m_disable_copy_filter->SetDescription(tr(TR_DISABLE_COPY_FILTER_DESCRIPTION)); m_arbitrary_mipmap_detection->SetDescription(tr(TR_ARBITRARY_MIPMAP_DETECTION_DESCRIPTION)); |
