configure_graphics_advanced.cpp 6.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130
  1. // Copyright 2020 yuzu Emulator Project
  2. // Licensed under GPLv2 or any later version
  3. // Refer to the license.txt file included.
  4. #include "common/settings.h"
  5. #include "core/core.h"
  6. #include "ui_configure_graphics_advanced.h"
  7. #include "yuzu/configuration/configuration_shared.h"
  8. #include "yuzu/configuration/configure_graphics_advanced.h"
  9. ConfigureGraphicsAdvanced::ConfigureGraphicsAdvanced(QWidget* parent)
  10. : QWidget(parent), ui(new Ui::ConfigureGraphicsAdvanced) {
  11. ui->setupUi(this);
  12. SetupPerGameUI();
  13. SetConfiguration();
  14. }
  15. ConfigureGraphicsAdvanced::~ConfigureGraphicsAdvanced() = default;
  16. void ConfigureGraphicsAdvanced::SetConfiguration() {
  17. const bool runtime_lock = !Core::System::GetInstance().IsPoweredOn();
  18. ui->use_vsync->setEnabled(runtime_lock);
  19. ui->use_assembly_shaders->setEnabled(runtime_lock);
  20. ui->use_asynchronous_shaders->setEnabled(runtime_lock);
  21. ui->anisotropic_filtering_combobox->setEnabled(runtime_lock);
  22. ui->use_vsync->setChecked(Settings::values.use_vsync.GetValue());
  23. ui->disable_fps_limit->setChecked(Settings::values.disable_fps_limit.GetValue());
  24. ui->use_assembly_shaders->setChecked(Settings::values.use_assembly_shaders.GetValue());
  25. ui->use_asynchronous_shaders->setChecked(Settings::values.use_asynchronous_shaders.GetValue());
  26. ui->use_fast_gpu_time->setChecked(Settings::values.use_fast_gpu_time.GetValue());
  27. if (Settings::IsConfiguringGlobal()) {
  28. ui->gpu_accuracy->setCurrentIndex(
  29. static_cast<int>(Settings::values.gpu_accuracy.GetValue()));
  30. ui->anisotropic_filtering_combobox->setCurrentIndex(
  31. Settings::values.max_anisotropy.GetValue());
  32. } else {
  33. ConfigurationShared::SetPerGameSetting(ui->gpu_accuracy, &Settings::values.gpu_accuracy);
  34. ConfigurationShared::SetPerGameSetting(ui->anisotropic_filtering_combobox,
  35. &Settings::values.max_anisotropy);
  36. ConfigurationShared::SetHighlight(ui->label_gpu_accuracy,
  37. !Settings::values.gpu_accuracy.UsingGlobal());
  38. ConfigurationShared::SetHighlight(ui->af_label,
  39. !Settings::values.max_anisotropy.UsingGlobal());
  40. }
  41. }
  42. void ConfigureGraphicsAdvanced::ApplyConfiguration() {
  43. // Subtract 2 if configuring per-game (separator and "use global configuration" take 2 slots)
  44. const auto gpu_accuracy = static_cast<Settings::GPUAccuracy>(
  45. ui->gpu_accuracy->currentIndex() -
  46. ((Settings::IsConfiguringGlobal()) ? 0 : ConfigurationShared::USE_GLOBAL_OFFSET));
  47. ConfigurationShared::ApplyPerGameSetting(&Settings::values.max_anisotropy,
  48. ui->anisotropic_filtering_combobox);
  49. ConfigurationShared::ApplyPerGameSetting(&Settings::values.use_vsync, ui->use_vsync, use_vsync);
  50. ConfigurationShared::ApplyPerGameSetting(&Settings::values.disable_fps_limit,
  51. ui->disable_fps_limit, disable_fps_limit);
  52. ConfigurationShared::ApplyPerGameSetting(&Settings::values.use_assembly_shaders,
  53. ui->use_assembly_shaders, use_assembly_shaders);
  54. ConfigurationShared::ApplyPerGameSetting(&Settings::values.use_asynchronous_shaders,
  55. ui->use_asynchronous_shaders,
  56. use_asynchronous_shaders);
  57. ConfigurationShared::ApplyPerGameSetting(&Settings::values.use_fast_gpu_time,
  58. ui->use_fast_gpu_time, use_fast_gpu_time);
  59. if (Settings::IsConfiguringGlobal()) {
  60. // Must guard in case of a during-game configuration when set to be game-specific.
  61. if (Settings::values.gpu_accuracy.UsingGlobal()) {
  62. Settings::values.gpu_accuracy.SetValue(gpu_accuracy);
  63. }
  64. } else {
  65. if (ui->gpu_accuracy->currentIndex() == ConfigurationShared::USE_GLOBAL_INDEX) {
  66. Settings::values.gpu_accuracy.SetGlobal(true);
  67. } else {
  68. Settings::values.gpu_accuracy.SetGlobal(false);
  69. Settings::values.gpu_accuracy.SetValue(gpu_accuracy);
  70. }
  71. }
  72. }
  73. void ConfigureGraphicsAdvanced::changeEvent(QEvent* event) {
  74. if (event->type() == QEvent::LanguageChange) {
  75. RetranslateUI();
  76. }
  77. QWidget::changeEvent(event);
  78. }
  79. void ConfigureGraphicsAdvanced::RetranslateUI() {
  80. ui->retranslateUi(this);
  81. }
  82. void ConfigureGraphicsAdvanced::SetupPerGameUI() {
  83. // Disable if not global (only happens during game)
  84. if (Settings::IsConfiguringGlobal()) {
  85. ui->gpu_accuracy->setEnabled(Settings::values.gpu_accuracy.UsingGlobal());
  86. ui->use_vsync->setEnabled(Settings::values.use_vsync.UsingGlobal());
  87. ui->disable_fps_limit->setEnabled(Settings::values.disable_fps_limit.UsingGlobal());
  88. ui->use_assembly_shaders->setEnabled(Settings::values.use_assembly_shaders.UsingGlobal());
  89. ui->use_asynchronous_shaders->setEnabled(
  90. Settings::values.use_asynchronous_shaders.UsingGlobal());
  91. ui->use_fast_gpu_time->setEnabled(Settings::values.use_fast_gpu_time.UsingGlobal());
  92. ui->anisotropic_filtering_combobox->setEnabled(
  93. Settings::values.max_anisotropy.UsingGlobal());
  94. return;
  95. }
  96. ConfigurationShared::SetColoredTristate(ui->use_vsync, Settings::values.use_vsync, use_vsync);
  97. ConfigurationShared::SetColoredTristate(ui->disable_fps_limit,
  98. Settings::values.disable_fps_limit, disable_fps_limit);
  99. ConfigurationShared::SetColoredTristate(
  100. ui->use_assembly_shaders, Settings::values.use_assembly_shaders, use_assembly_shaders);
  101. ConfigurationShared::SetColoredTristate(ui->use_asynchronous_shaders,
  102. Settings::values.use_asynchronous_shaders,
  103. use_asynchronous_shaders);
  104. ConfigurationShared::SetColoredTristate(ui->use_fast_gpu_time,
  105. Settings::values.use_fast_gpu_time, use_fast_gpu_time);
  106. ConfigurationShared::SetColoredComboBox(
  107. ui->gpu_accuracy, ui->label_gpu_accuracy,
  108. static_cast<int>(Settings::values.gpu_accuracy.GetValue(true)));
  109. ConfigurationShared::SetColoredComboBox(
  110. ui->anisotropic_filtering_combobox, ui->af_label,
  111. static_cast<int>(Settings::values.max_anisotropy.GetValue(true)));
  112. }