diff --git a/src/citra_qt/configuration/configure_graphics.ui b/src/citra_qt/configuration/configure_graphics.ui
index 74fe21786..f5c43cfc4 100644
--- a/src/citra_qt/configuration/configure_graphics.ui
+++ b/src/citra_qt/configuration/configure_graphics.ui
@@ -60,6 +60,11 @@
OpenGL
+ -
+
+ Vulkan
+
+
diff --git a/src/citra_qt/main.cpp b/src/citra_qt/main.cpp
index 546468914..893fd1015 100644
--- a/src/citra_qt/main.cpp
+++ b/src/citra_qt/main.cpp
@@ -357,6 +357,22 @@ void GMainWindow::InitializeWidgets() {
statusBar()->addPermanentWidget(label);
}
+ // Setup Graphics API button
+ graphics_api_button = new QPushButton();
+ graphics_api_button->setObjectName(QStringLiteral("GraphicsAPIStatusBarButton"));
+ graphics_api_button->setFocusPolicy(Qt::NoFocus);
+ UpdateAPIIndicator();
+
+ connect(graphics_api_button, &QPushButton::clicked, this, [this] {
+ if (emulation_running) {
+ return;
+ }
+
+ UpdateAPIIndicator(true);
+ });
+
+ statusBar()->insertPermanentWidget(0, graphics_api_button);
+
statusBar()->addPermanentWidget(multiplayer_state->GetStatusText());
statusBar()->addPermanentWidget(multiplayer_state->GetStatusIcon());
@@ -1988,6 +2004,7 @@ void GMainWindow::OnConfigure() {
}
UpdateSecondaryWindowVisibility();
UpdateBootHomeMenuState();
+ UpdateAPIIndicator();
} else {
Settings::values.input_profiles = old_input_profiles;
Settings::values.touch_from_button_maps = old_touch_from_button_maps;
@@ -2314,6 +2331,26 @@ void GMainWindow::ShowMouseCursor() {
}
}
+void GMainWindow::UpdateAPIIndicator(bool update) {
+ static std::array graphics_apis = {QStringLiteral("SOFTWARE"), QStringLiteral("OPENGL"),
+ QStringLiteral("VULKAN")};
+
+ static std::array graphics_api_colors = {QStringLiteral("#3ae400"), QStringLiteral("#00ccdd"),
+ QStringLiteral("#91242a")};
+
+ u32 api_index = static_cast(Settings::values.graphics_api.GetValue());
+ if (update) {
+ api_index = (api_index + 1) % graphics_apis.size();
+ Settings::values.graphics_api = static_cast(api_index);
+ }
+
+ const QString style_sheet = QStringLiteral("QPushButton { font-weight: bold; color: %0; }")
+ .arg(graphics_api_colors[api_index]);
+
+ graphics_api_button->setText(graphics_apis[api_index]);
+ graphics_api_button->setStyleSheet(style_sheet);
+}
+
void GMainWindow::OnMouseActivity() {
ShowMouseCursor();
}
diff --git a/src/citra_qt/main.h b/src/citra_qt/main.h
index a36fd83c5..1e561558d 100644
--- a/src/citra_qt/main.h
+++ b/src/citra_qt/main.h
@@ -7,6 +7,7 @@
#include
#include
#include
+#include
#include
#include
#include "citra_qt/compatibility_list.h"
@@ -254,6 +255,7 @@ private:
void HideMouseCursor();
void ShowMouseCursor();
void OpenPerGameConfiguration(u64 title_id, const QString& file_name);
+ void UpdateAPIIndicator(bool update = false);
std::unique_ptr ui;
@@ -269,6 +271,7 @@ private:
QLabel* emu_speed_label = nullptr;
QLabel* game_fps_label = nullptr;
QLabel* emu_frametime_label = nullptr;
+ QPushButton* graphics_api_button = nullptr;
QTimer status_bar_update_timer;
bool message_label_used_for_movie = false;