summaryrefslogtreecommitdiff
path: root/src/yuzu/configuration/configure_graphics_advanced.cpp
diff options
context:
space:
mode:
authorlat9nq <22451773+lat9nq@users.noreply.github.com>2023-05-07 09:48:26 -0400
committerlat9nq <22451773+lat9nq@users.noreply.github.com>2023-07-21 10:56:07 -0400
commita007ac6b9ccc23861f5a5c6967d535220ed794b0 (patch)
tree934c66c124dd77a17fae07ae919335efb1107255 /src/yuzu/configuration/configure_graphics_advanced.cpp
parentb11b4be7cb764bc0c1aa6c563ccf41a3d1b335dd (diff)
configure_graphics_advance: Generate UI at runtime
We can iterate through the AdvancedGraphics settings and generate the UI during runtime. This doesn't help runtime efficiency, but it helps a ton in reducing the amount of work a developer needs in order to add a new setting.
Diffstat (limited to 'src/yuzu/configuration/configure_graphics_advanced.cpp')
-rw-r--r--src/yuzu/configuration/configure_graphics_advanced.cpp172
1 files changed, 36 insertions, 136 deletions
diff --git a/src/yuzu/configuration/configure_graphics_advanced.cpp b/src/yuzu/configuration/configure_graphics_advanced.cpp
index d332c9b7b..6d387b5c3 100644
--- a/src/yuzu/configuration/configure_graphics_advanced.cpp
+++ b/src/yuzu/configuration/configure_graphics_advanced.cpp
@@ -1,6 +1,8 @@
// SPDX-FileCopyrightText: Copyright 2020 yuzu Emulator Project
// SPDX-License-Identifier: GPL-2.0-or-later
+#include <QLabel>
+#include <qnamespace.h>
#include "common/settings.h"
#include "core/core.h"
#include "ui_configure_graphics_advanced.h"
@@ -9,94 +11,54 @@
ConfigureGraphicsAdvanced::ConfigureGraphicsAdvanced(
const Core::System& system_,
- std::shared_ptr<std::forward_list<ConfigurationShared::Tab*>> group, QWidget* parent)
- : Tab(group, parent), ui{std::make_unique<Ui::ConfigureGraphicsAdvanced>()}, system{system_} {
+ std::shared_ptr<std::forward_list<ConfigurationShared::Tab*>> group,
+ const ConfigurationShared::TranslationMap& translations_, QWidget* parent)
+ : Tab(group, parent), ui{std::make_unique<Ui::ConfigureGraphicsAdvanced>()}, system{system_},
+ translations{translations_} {
ui->setupUi(this);
- SetupPerGameUI();
-
SetConfiguration();
- ui->enable_compute_pipelines_checkbox->setVisible(false);
+ checkbox_enable_compute_pipelines->setVisible(false);
}
ConfigureGraphicsAdvanced::~ConfigureGraphicsAdvanced() = default;
void ConfigureGraphicsAdvanced::SetConfiguration() {
const bool runtime_lock = !system.IsPoweredOn();
- ui->use_reactive_flushing->setEnabled(runtime_lock);
- ui->async_present->setEnabled(runtime_lock);
- ui->renderer_force_max_clock->setEnabled(runtime_lock);
- ui->astc_recompression_combobox->setEnabled(runtime_lock);
- ui->use_asynchronous_shaders->setEnabled(runtime_lock);
- ui->anisotropic_filtering_combobox->setEnabled(runtime_lock);
- ui->enable_compute_pipelines_checkbox->setEnabled(runtime_lock);
-
- ui->async_present->setChecked(Settings::values.async_presentation.GetValue());
- ui->renderer_force_max_clock->setChecked(Settings::values.renderer_force_max_clock.GetValue());
- ui->use_reactive_flushing->setChecked(Settings::values.use_reactive_flushing.GetValue());
- ui->use_asynchronous_shaders->setChecked(Settings::values.use_asynchronous_shaders.GetValue());
- ui->use_fast_gpu_time->setChecked(Settings::values.use_fast_gpu_time.GetValue());
- ui->use_vulkan_driver_pipeline_cache->setChecked(
- Settings::values.use_vulkan_driver_pipeline_cache.GetValue());
- ui->enable_compute_pipelines_checkbox->setChecked(
- Settings::values.enable_compute_pipelines.GetValue());
- ui->use_video_framerate_checkbox->setChecked(Settings::values.use_video_framerate.GetValue());
- ui->barrier_feedback_loops_checkbox->setChecked(
- Settings::values.barrier_feedback_loops.GetValue());
-
- if (Settings::IsConfiguringGlobal()) {
- ui->gpu_accuracy->setCurrentIndex(
- static_cast<int>(Settings::values.gpu_accuracy.GetValue()));
- ui->anisotropic_filtering_combobox->setCurrentIndex(
- Settings::values.max_anisotropy.GetValue());
- ui->astc_recompression_combobox->setCurrentIndex(
- static_cast<int>(Settings::values.astc_recompression.GetValue()));
- } else {
- ConfigurationShared::SetPerGameSetting(ui->gpu_accuracy, &Settings::values.gpu_accuracy);
- ConfigurationShared::SetPerGameSetting(ui->anisotropic_filtering_combobox,
- &Settings::values.max_anisotropy);
- ConfigurationShared::SetPerGameSetting(ui->astc_recompression_combobox,
- &Settings::values.astc_recompression);
- ConfigurationShared::SetHighlight(ui->label_gpu_accuracy,
- !Settings::values.gpu_accuracy.UsingGlobal());
- ConfigurationShared::SetHighlight(ui->af_label,
- !Settings::values.max_anisotropy.UsingGlobal());
- ConfigurationShared::SetHighlight(ui->label_astc_recompression,
- !Settings::values.astc_recompression.UsingGlobal());
+ auto& layout = *ui->populate_target->layout();
+ std::map<std::string, QWidget*> hold{}; // A map will sort the data for us
+
+ for (auto setting :
+ Settings::values.linkage.by_category[Settings::Category::AdvancedGraphics]) {
+ QWidget* widget = ConfigurationShared::CreateWidget(setting, translations, this,
+ runtime_lock, apply_funcs, trackers);
+
+ if (widget == nullptr) {
+ continue;
+ }
+
+ if (!setting->IsEnum()) {
+ hold.emplace(setting->GetLabel(), widget);
+ } else {
+ layout.addWidget(widget);
+ }
+
+ if (setting->GetLabel() == "enable_compute_pipelines") {
+ checkbox_enable_compute_pipelines = widget;
+ }
+ }
+ for (const auto& [label, widget] : hold) {
+ layout.addWidget(widget);
}
}
void ConfigureGraphicsAdvanced::ApplyConfiguration() {
- ConfigurationShared::ApplyPerGameSetting(&Settings::values.gpu_accuracy, ui->gpu_accuracy);
- ConfigurationShared::ApplyPerGameSetting(&Settings::values.async_presentation,
- ui->async_present, async_present);
- ConfigurationShared::ApplyPerGameSetting(&Settings::values.renderer_force_max_clock,
- ui->renderer_force_max_clock,
- renderer_force_max_clock);
- ConfigurationShared::ApplyPerGameSetting(&Settings::values.max_anisotropy,
- ui->anisotropic_filtering_combobox);
- ConfigurationShared::ApplyPerGameSetting(&Settings::values.use_reactive_flushing,
- ui->use_reactive_flushing, use_reactive_flushing);
- ConfigurationShared::ApplyPerGameSetting(&Settings::values.astc_recompression,
- ui->astc_recompression_combobox);
- ConfigurationShared::ApplyPerGameSetting(&Settings::values.use_asynchronous_shaders,
- ui->use_asynchronous_shaders,
- use_asynchronous_shaders);
- ConfigurationShared::ApplyPerGameSetting(&Settings::values.use_fast_gpu_time,
- ui->use_fast_gpu_time, use_fast_gpu_time);
- ConfigurationShared::ApplyPerGameSetting(&Settings::values.use_vulkan_driver_pipeline_cache,
- ui->use_vulkan_driver_pipeline_cache,
- use_vulkan_driver_pipeline_cache);
- ConfigurationShared::ApplyPerGameSetting(&Settings::values.enable_compute_pipelines,
- ui->enable_compute_pipelines_checkbox,
- enable_compute_pipelines);
- ConfigurationShared::ApplyPerGameSetting(&Settings::values.use_video_framerate,
- ui->use_video_framerate_checkbox, use_video_framerate);
- ConfigurationShared::ApplyPerGameSetting(&Settings::values.barrier_feedback_loops,
- ui->barrier_feedback_loops_checkbox,
- barrier_feedback_loops);
+ const bool is_powered_on = system.IsPoweredOn();
+ for (const auto& func : apply_funcs) {
+ func(is_powered_on);
+ }
}
void ConfigureGraphicsAdvanced::changeEvent(QEvent* event) {
@@ -111,68 +73,6 @@ void ConfigureGraphicsAdvanced::RetranslateUI() {
ui->retranslateUi(this);
}
-void ConfigureGraphicsAdvanced::SetupPerGameUI() {
- // Disable if not global (only happens during game)
- if (Settings::IsConfiguringGlobal()) {
- ui->gpu_accuracy->setEnabled(Settings::values.gpu_accuracy.UsingGlobal());
- ui->async_present->setEnabled(Settings::values.async_presentation.UsingGlobal());
- ui->renderer_force_max_clock->setEnabled(
- Settings::values.renderer_force_max_clock.UsingGlobal());
- ui->use_reactive_flushing->setEnabled(Settings::values.use_reactive_flushing.UsingGlobal());
- ui->astc_recompression_combobox->setEnabled(
- Settings::values.astc_recompression.UsingGlobal());
- ui->use_asynchronous_shaders->setEnabled(
- Settings::values.use_asynchronous_shaders.UsingGlobal());
- ui->use_fast_gpu_time->setEnabled(Settings::values.use_fast_gpu_time.UsingGlobal());
- ui->use_vulkan_driver_pipeline_cache->setEnabled(
- Settings::values.use_vulkan_driver_pipeline_cache.UsingGlobal());
- ui->anisotropic_filtering_combobox->setEnabled(
- Settings::values.max_anisotropy.UsingGlobal());
- ui->enable_compute_pipelines_checkbox->setEnabled(
- Settings::values.enable_compute_pipelines.UsingGlobal());
- ui->use_video_framerate_checkbox->setEnabled(
- Settings::values.use_video_framerate.UsingGlobal());
- ui->barrier_feedback_loops_checkbox->setEnabled(
- Settings::values.barrier_feedback_loops.UsingGlobal());
-
- return;
- }
-
- ConfigurationShared::SetColoredTristate(ui->async_present, Settings::values.async_presentation,
- async_present);
- ConfigurationShared::SetColoredTristate(ui->renderer_force_max_clock,
- Settings::values.renderer_force_max_clock,
- renderer_force_max_clock);
- ConfigurationShared::SetColoredTristate(
- ui->use_reactive_flushing, Settings::values.use_reactive_flushing, use_reactive_flushing);
- ConfigurationShared::SetColoredTristate(ui->use_asynchronous_shaders,
- Settings::values.use_asynchronous_shaders,
- use_asynchronous_shaders);
- ConfigurationShared::SetColoredTristate(ui->use_fast_gpu_time,
- Settings::values.use_fast_gpu_time, use_fast_gpu_time);
- ConfigurationShared::SetColoredTristate(ui->use_vulkan_driver_pipeline_cache,
- Settings::values.use_vulkan_driver_pipeline_cache,
- use_vulkan_driver_pipeline_cache);
- ConfigurationShared::SetColoredTristate(ui->enable_compute_pipelines_checkbox,
- Settings::values.enable_compute_pipelines,
- enable_compute_pipelines);
- ConfigurationShared::SetColoredTristate(ui->use_video_framerate_checkbox,
- Settings::values.use_video_framerate,
- use_video_framerate);
- ConfigurationShared::SetColoredTristate(ui->barrier_feedback_loops_checkbox,
- Settings::values.barrier_feedback_loops,
- barrier_feedback_loops);
- ConfigurationShared::SetColoredComboBox(
- ui->gpu_accuracy, ui->label_gpu_accuracy,
- static_cast<int>(Settings::values.gpu_accuracy.GetValue(true)));
- ConfigurationShared::SetColoredComboBox(
- ui->anisotropic_filtering_combobox, ui->af_label,
- static_cast<int>(Settings::values.max_anisotropy.GetValue(true)));
- ConfigurationShared::SetColoredComboBox(
- ui->astc_recompression_combobox, ui->label_astc_recompression,
- static_cast<int>(Settings::values.astc_recompression.GetValue(true)));
-}
-
void ConfigureGraphicsAdvanced::ExposeComputeOption() {
- ui->enable_compute_pipelines_checkbox->setVisible(true);
+ checkbox_enable_compute_pipelines->setVisible(true);
}