mirror of
https://github.com/Lime3DS/Lime3DS
synced 2025-01-01 12:02:39 -06:00
8131bd32e3
* Add Anaglyph 3D Change 3D slider in-game Change shaders while game is running Move shader loading into function Disable 3D slider setting when stereoscopy is off The rest of the shaders Address review issues Documentation and minor fixups Forgot clang-format Fix shader release on SDL2-software rendering Remove unnecessary state changes Respect 3D factor setting regardless of stereoscopic rendering Improve shader resolution passing Minor setting-related improvements Add option to toggle texture filtering Rebase fixes * One final clang-format * Fix OpenGL problems
131 lines
5.9 KiB
C++
131 lines
5.9 KiB
C++
// Copyright 2016 Citra Emulator Project
|
|
// Licensed under GPLv2 or any later version
|
|
// Refer to the license.txt file included.
|
|
|
|
#include <QColorDialog>
|
|
#ifdef __APPLE__
|
|
#include <QMessageBox>
|
|
#endif
|
|
#include "citra_qt/configuration/configure_graphics.h"
|
|
#include "core/core.h"
|
|
#include "core/settings.h"
|
|
#include "ui_configure_graphics.h"
|
|
#include "video_core/renderer_opengl/post_processing_opengl.h"
|
|
|
|
ConfigureGraphics::ConfigureGraphics(QWidget* parent)
|
|
: QWidget(parent), ui(new Ui::ConfigureGraphics) {
|
|
ui->setupUi(this);
|
|
SetConfiguration();
|
|
|
|
connect(ui->toggle_frame_limit, &QCheckBox::toggled, ui->frame_limit, &QSpinBox::setEnabled);
|
|
|
|
ui->layoutBox->setEnabled(!Settings::values.custom_layout);
|
|
|
|
ui->hw_renderer_group->setEnabled(ui->toggle_hw_renderer->isChecked());
|
|
connect(ui->toggle_hw_renderer, &QCheckBox::toggled, ui->hw_renderer_group,
|
|
&QWidget::setEnabled);
|
|
ui->hw_shader_group->setEnabled(ui->toggle_hw_shader->isChecked());
|
|
connect(ui->toggle_hw_shader, &QCheckBox::toggled, ui->hw_shader_group, &QWidget::setEnabled);
|
|
#ifdef __APPLE__
|
|
connect(ui->toggle_hw_shader, &QCheckBox::stateChanged, this, [this](int state) {
|
|
if (state == Qt::Checked) {
|
|
QMessageBox::warning(
|
|
this, tr("Hardware Shader Warning"),
|
|
tr("Hardware Shader support is broken on macOS, and will cause graphical issues "
|
|
"like showing a black screen.<br><br>The option is only there for "
|
|
"test/development purposes. If you experience graphical issues with Hardware "
|
|
"Shader, please turn it off."));
|
|
}
|
|
});
|
|
#endif
|
|
|
|
connect(ui->render_3d_combobox,
|
|
static_cast<void (QComboBox::*)(int)>(&QComboBox::currentIndexChanged), this,
|
|
[this](int currentIndex) {
|
|
updateShaders(static_cast<Settings::StereoRenderOption>(currentIndex) ==
|
|
Settings::StereoRenderOption::Anaglyph);
|
|
});
|
|
|
|
connect(ui->bg_button, &QPushButton::clicked, this, [this] {
|
|
const QColor new_bg_color = QColorDialog::getColor(bg_color);
|
|
if (!new_bg_color.isValid()) {
|
|
return;
|
|
}
|
|
bg_color = new_bg_color;
|
|
QPixmap pixmap(ui->bg_button->size());
|
|
pixmap.fill(bg_color);
|
|
const QIcon color_icon(pixmap);
|
|
ui->bg_button->setIcon(color_icon);
|
|
});
|
|
}
|
|
|
|
ConfigureGraphics::~ConfigureGraphics() = default;
|
|
|
|
void ConfigureGraphics::SetConfiguration() {
|
|
ui->toggle_hw_renderer->setChecked(Settings::values.use_hw_renderer);
|
|
ui->toggle_hw_shader->setChecked(Settings::values.use_hw_shader);
|
|
ui->toggle_accurate_gs->setChecked(Settings::values.shaders_accurate_gs);
|
|
ui->toggle_accurate_mul->setChecked(Settings::values.shaders_accurate_mul);
|
|
ui->toggle_shader_jit->setChecked(Settings::values.use_shader_jit);
|
|
ui->resolution_factor_combobox->setCurrentIndex(Settings::values.resolution_factor);
|
|
ui->toggle_frame_limit->setChecked(Settings::values.use_frame_limit);
|
|
ui->frame_limit->setEnabled(ui->toggle_frame_limit->isChecked());
|
|
ui->frame_limit->setValue(Settings::values.frame_limit);
|
|
ui->render_3d_combobox->setCurrentIndex(static_cast<int>(Settings::values.render_3d));
|
|
ui->factor_3d->setValue(Settings::values.factor_3d);
|
|
updateShaders(Settings::values.render_3d == Settings::StereoRenderOption::Anaglyph);
|
|
ui->toggle_linear_filter->setChecked(Settings::values.filter_mode);
|
|
ui->layout_combobox->setCurrentIndex(static_cast<int>(Settings::values.layout_option));
|
|
ui->swap_screen->setChecked(Settings::values.swap_screen);
|
|
bg_color = QColor::fromRgbF(Settings::values.bg_red, Settings::values.bg_green,
|
|
Settings::values.bg_blue);
|
|
QPixmap pixmap(ui->bg_button->size());
|
|
pixmap.fill(bg_color);
|
|
const QIcon color_icon(pixmap);
|
|
ui->bg_button->setIcon(color_icon);
|
|
}
|
|
|
|
void ConfigureGraphics::ApplyConfiguration() {
|
|
Settings::values.use_hw_renderer = ui->toggle_hw_renderer->isChecked();
|
|
Settings::values.use_hw_shader = ui->toggle_hw_shader->isChecked();
|
|
Settings::values.shaders_accurate_gs = ui->toggle_accurate_gs->isChecked();
|
|
Settings::values.shaders_accurate_mul = ui->toggle_accurate_mul->isChecked();
|
|
Settings::values.use_shader_jit = ui->toggle_shader_jit->isChecked();
|
|
Settings::values.resolution_factor =
|
|
static_cast<u16>(ui->resolution_factor_combobox->currentIndex());
|
|
Settings::values.use_frame_limit = ui->toggle_frame_limit->isChecked();
|
|
Settings::values.frame_limit = ui->frame_limit->value();
|
|
Settings::values.render_3d =
|
|
static_cast<Settings::StereoRenderOption>(ui->render_3d_combobox->currentIndex());
|
|
Settings::values.factor_3d = ui->factor_3d->value();
|
|
Settings::values.pp_shader_name =
|
|
ui->shader_combobox->itemText(ui->shader_combobox->currentIndex()).toStdString();
|
|
Settings::values.filter_mode = ui->toggle_linear_filter->isChecked();
|
|
Settings::values.layout_option =
|
|
static_cast<Settings::LayoutOption>(ui->layout_combobox->currentIndex());
|
|
Settings::values.swap_screen = ui->swap_screen->isChecked();
|
|
Settings::values.bg_red = static_cast<float>(bg_color.redF());
|
|
Settings::values.bg_green = static_cast<float>(bg_color.greenF());
|
|
Settings::values.bg_blue = static_cast<float>(bg_color.blueF());
|
|
}
|
|
|
|
void ConfigureGraphics::updateShaders(bool anaglyph) {
|
|
ui->shader_combobox->clear();
|
|
|
|
if (anaglyph)
|
|
ui->shader_combobox->addItem("dubois (builtin)");
|
|
else
|
|
ui->shader_combobox->addItem("none (builtin)");
|
|
|
|
ui->shader_combobox->setCurrentIndex(0);
|
|
|
|
for (const auto& shader : OpenGL::GetPostProcessingShaderList(anaglyph)) {
|
|
ui->shader_combobox->addItem(QString::fromStdString(shader));
|
|
if (Settings::values.pp_shader_name == shader)
|
|
ui->shader_combobox->setCurrentIndex(ui->shader_combobox->count() - 1);
|
|
}
|
|
}
|
|
|
|
void ConfigureGraphics::RetranslateUI() {
|
|
ui->retranslateUi(this);
|
|
}
|