summaryrefslogtreecommitdiff
path: root/src/citron/configuration/configure_graphics.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/citron/configuration/configure_graphics.h')
-rw-r--r--src/citron/configuration/configure_graphics.h116
1 files changed, 116 insertions, 0 deletions
diff --git a/src/citron/configuration/configure_graphics.h b/src/citron/configuration/configure_graphics.h
new file mode 100644
index 000000000..b92b4496b
--- /dev/null
+++ b/src/citron/configuration/configure_graphics.h
@@ -0,0 +1,116 @@
+// SPDX-FileCopyrightText: 2016 Citra Emulator Project
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#pragma once
+
+#include <functional>
+#include <memory>
+#include <type_traits>
+#include <typeindex>
+#include <vector>
+#include <QColor>
+#include <QString>
+#include <QWidget>
+#include <qobjectdefs.h>
+#include <vulkan/vulkan_core.h>
+#include "common/common_types.h"
+#include "common/settings_enums.h"
+#include "configuration/shared_translation.h"
+#include "vk_device_info.h"
+#include "yuzu/configuration/configuration_shared.h"
+
+class QPushButton;
+class QEvent;
+class QObject;
+class QComboBox;
+
+namespace Settings {
+enum class NvdecEmulation : u32;
+enum class RendererBackend : u32;
+enum class ShaderBackend : u32;
+} // namespace Settings
+
+namespace Core {
+class System;
+}
+
+namespace Ui {
+class ConfigureGraphics;
+}
+
+namespace ConfigurationShared {
+class Builder;
+}
+
+class ConfigureGraphics : public ConfigurationShared::Tab {
+ Q_OBJECT
+
+public:
+ explicit ConfigureGraphics(
+ const Core::System& system_, std::vector<VkDeviceInfo::Record>& records,
+ const std::function<void()>& expose_compute_option,
+ const std::function<void(Settings::AspectRatio, Settings::ResolutionSetup)>&
+ update_aspect_ratio,
+ std::shared_ptr<std::vector<ConfigurationShared::Tab*>> group,
+ const ConfigurationShared::Builder& builder, QWidget* parent = nullptr);
+ ~ConfigureGraphics() override;
+
+ void ApplyConfiguration() override;
+ void SetConfiguration() override;
+
+private:
+ void changeEvent(QEvent* event) override;
+ void RetranslateUI();
+
+ void Setup(const ConfigurationShared::Builder& builder);
+
+ void PopulateVSyncModeSelection(bool use_setting);
+ void UpdateVsyncSetting() const;
+ void UpdateBackgroundColorButton(QColor color);
+ void UpdateAPILayout();
+ void UpdateDeviceSelection(int device);
+ void UpdateShaderBackendSelection(int backend);
+
+ void RetrieveVulkanDevices();
+
+ /* Turns a Vulkan present mode into a textual string for a UI
+ * (and eventually for a human to read) */
+ const QString TranslateVSyncMode(VkPresentModeKHR mode,
+ Settings::RendererBackend backend) const;
+
+ Settings::RendererBackend GetCurrentGraphicsBackend() const;
+
+ int FindIndex(u32 enumeration, int value) const;
+
+ std::unique_ptr<Ui::ConfigureGraphics> ui;
+ QColor bg_color;
+
+ std::vector<std::function<void(bool)>> apply_funcs{};
+
+ std::vector<VkDeviceInfo::Record>& records;
+ std::vector<QString> vulkan_devices;
+ std::vector<std::vector<VkPresentModeKHR>> device_present_modes;
+ std::vector<VkPresentModeKHR>
+ vsync_mode_combobox_enum_map{}; //< Keeps track of which present mode corresponds to which
+ // selection in the combobox
+ u32 vulkan_device{};
+ Settings::ShaderBackend shader_backend{};
+ const std::function<void()>& expose_compute_option;
+ const std::function<void(Settings::AspectRatio, Settings::ResolutionSetup)> update_aspect_ratio;
+
+ const Core::System& system;
+ const ConfigurationShared::ComboboxTranslationMap& combobox_translations;
+ const std::vector<std::pair<u32, QString>>& shader_mapping;
+
+ QPushButton* api_restore_global_button;
+ QComboBox* vulkan_device_combobox;
+ QComboBox* api_combobox;
+ QComboBox* shader_backend_combobox;
+ QComboBox* vsync_mode_combobox;
+ QPushButton* vsync_restore_global_button;
+ QWidget* vulkan_device_widget;
+ QWidget* api_widget;
+ QWidget* shader_backend_widget;
+ QComboBox* aspect_ratio_combobox;
+ QComboBox* resolution_combobox;
+};