mirror of
https://github.com/dolphin-emu/dolphin.git
synced 2025-07-21 05:09:34 -06:00
Video: implement output resampling (upscaling/downscaling) methods
This commit is contained in:
@ -105,6 +105,22 @@ void EnhancementsWidget::CreateWidgets()
|
||||
m_texture_filtering_combo->addItem(tr("Force Linear and 16x Anisotropic"),
|
||||
TEXTURE_FILTERING_FORCE_LINEAR_ANISO_16X);
|
||||
|
||||
m_output_resampling_combo = new ToolTipComboBox();
|
||||
m_output_resampling_combo->addItem(tr("Default"),
|
||||
static_cast<int>(OutputResamplingMode::Default));
|
||||
m_output_resampling_combo->addItem(tr("Bilinear"),
|
||||
static_cast<int>(OutputResamplingMode::Bilinear));
|
||||
m_output_resampling_combo->addItem(tr("Bicubic"),
|
||||
static_cast<int>(OutputResamplingMode::Bicubic));
|
||||
m_output_resampling_combo->addItem(tr("Hermite"),
|
||||
static_cast<int>(OutputResamplingMode::Hermite));
|
||||
m_output_resampling_combo->addItem(tr("Catmull-Rom"),
|
||||
static_cast<int>(OutputResamplingMode::CatmullRom));
|
||||
m_output_resampling_combo->addItem(tr("Nearest Neighbor"),
|
||||
static_cast<int>(OutputResamplingMode::NearestNeighbor));
|
||||
m_output_resampling_combo->addItem(tr("Sharp Bilinear"),
|
||||
static_cast<int>(OutputResamplingMode::SharpBilinear));
|
||||
|
||||
m_configure_color_correction = new ToolTipPushButton(tr("Configure"));
|
||||
|
||||
m_pp_effect = new ToolTipComboBox();
|
||||
@ -136,6 +152,10 @@ void EnhancementsWidget::CreateWidgets()
|
||||
enhancements_layout->addWidget(m_texture_filtering_combo, row, 1, 1, -1);
|
||||
++row;
|
||||
|
||||
enhancements_layout->addWidget(new QLabel(tr("Output Resampling:")), row, 0);
|
||||
enhancements_layout->addWidget(m_output_resampling_combo, row, 1, 1, -1);
|
||||
++row;
|
||||
|
||||
enhancements_layout->addWidget(new QLabel(tr("Color Correction:")), row, 0);
|
||||
enhancements_layout->addWidget(m_configure_color_correction, row, 1, 1, -1);
|
||||
++row;
|
||||
@ -195,6 +215,8 @@ void EnhancementsWidget::ConnectWidgets()
|
||||
[this](int) { SaveSettings(); });
|
||||
connect(m_texture_filtering_combo, qOverload<int>(&QComboBox::currentIndexChanged),
|
||||
[this](int) { SaveSettings(); });
|
||||
connect(m_output_resampling_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] {
|
||||
@ -325,6 +347,14 @@ void EnhancementsWidget::LoadSettings()
|
||||
break;
|
||||
}
|
||||
|
||||
// Resampling
|
||||
const OutputResamplingMode output_resampling_mode =
|
||||
Config::Get(Config::GFX_ENHANCE_OUTPUT_RESAMPLING);
|
||||
m_output_resampling_combo->setCurrentIndex(static_cast<int>(output_resampling_mode));
|
||||
|
||||
m_output_resampling_combo->setEnabled(g_Config.backend_info.bSupportsPostProcessing);
|
||||
|
||||
// Color Correction
|
||||
m_configure_color_correction->setEnabled(g_Config.backend_info.bSupportsPostProcessing);
|
||||
|
||||
// Post Processing Shader
|
||||
@ -413,6 +443,10 @@ void EnhancementsWidget::SaveSettings()
|
||||
break;
|
||||
}
|
||||
|
||||
const int output_resampling_selection = m_output_resampling_combo->currentData().toInt();
|
||||
Config::SetBaseOrCurrent(Config::GFX_ENHANCE_OUTPUT_RESAMPLING,
|
||||
static_cast<OutputResamplingMode>(output_resampling_selection));
|
||||
|
||||
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,
|
||||
@ -455,6 +489,16 @@ void EnhancementsWidget::AddDescriptions()
|
||||
"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_OUTPUT_RESAMPLING_DESCRIPTION[] = QT_TR_NOOP(
|
||||
"Affects how the game output image is upscaled or downscaled to the window resolution.<br>"
|
||||
"\"Default\" will rely on the GPU internal bilinear sampler which isn't gamma corrected."
|
||||
"<br>\"Bilinear\" (gamma corrected) is a good compromise between quality and performance."
|
||||
"<br>\"Bicubic\" is smoother than \"Bilinear\"."
|
||||
"<br>\"Hermite\" might offer the best quality when upscaling,"
|
||||
" at a slightly bigger perform cost.<br>\"Catmull-Rom\" is best for downscaling."
|
||||
"<br>\"Nearest Neighbor\" doesn't do any resampling, select if you like a pixelated look."
|
||||
"<br>\"Sharp Bilinear\" works best with 2D games at low resolutions, use if you like a"
|
||||
" sharp look.<br><br><dolphin_emphasis>If unsure, select 'Default'.</dolphin_emphasis>");
|
||||
static const char TR_COLOR_CORRECTION_DESCRIPTION[] =
|
||||
QT_TR_NOOP("A group of features to make the colors more accurate, matching the color space "
|
||||
"Wii and GC games were meant for.");
|
||||
@ -537,6 +581,9 @@ void EnhancementsWidget::AddDescriptions()
|
||||
m_texture_filtering_combo->SetTitle(tr("Texture Filtering"));
|
||||
m_texture_filtering_combo->SetDescription(tr(TR_FORCE_TEXTURE_FILTERING_DESCRIPTION));
|
||||
|
||||
m_output_resampling_combo->SetTitle(tr("Output Resampling"));
|
||||
m_output_resampling_combo->SetDescription(tr(TR_OUTPUT_RESAMPLING_DESCRIPTION));
|
||||
|
||||
m_configure_color_correction->SetTitle(tr("Color Correction"));
|
||||
m_configure_color_correction->SetDescription(tr(TR_COLOR_CORRECTION_DESCRIPTION));
|
||||
|
||||
|
Reference in New Issue
Block a user