diff --git a/src/citra_qt/bootmanager.cpp b/src/citra_qt/bootmanager.cpp index 3cb1c904d..5b3238b42 100644 --- a/src/citra_qt/bootmanager.cpp +++ b/src/citra_qt/bootmanager.cpp @@ -5,12 +5,11 @@ #include #include -#include #include #include #include #include -#include +#include #include "citra_qt/bootmanager.h" #include "citra_qt/main.h" #include "common/color.h" @@ -163,7 +162,7 @@ public: // disable vsync for any shared contexts auto format = share_context->format(); - format.setSwapInterval(main_surface ? Settings::values.use_vsync_new.GetValue() : 0); + format.setSwapInterval(0); context = std::make_unique(); context->setShareContext(share_context); @@ -387,7 +386,7 @@ static Frontend::EmuWindow::WindowSystemInfo GetWindowSystemInfo(QWindow* window return wsi; } -std::shared_ptr GRenderWindow::main_context; +std::unique_ptr GRenderWindow::main_context; GRenderWindow::GRenderWindow(QWidget* parent_, EmuThread* emu_thread, bool is_secondary_) : QWidget(parent_), EmuWindow(is_secondary_), emu_thread(emu_thread) { @@ -668,12 +667,16 @@ bool GRenderWindow::InitializeOpenGL() { child_widget->windowHandle()->create(); if (!main_context) { - main_context = std::make_shared(); + main_context = std::make_unique(); } auto child_context = CreateSharedContext(); child->SetContext(std::move(child_context)); + auto format = child_widget->windowHandle()->format(); + format.setSwapInterval(Settings::values.use_vsync_new.GetValue()); + child_widget->windowHandle()->setFormat(format); + return true; #else QMessageBox::warning(this, tr("OpenGL not available!"), diff --git a/src/citra_qt/bootmanager.h b/src/citra_qt/bootmanager.h index d06c1ce5e..f0019886d 100644 --- a/src/citra_qt/bootmanager.h +++ b/src/citra_qt/bootmanager.h @@ -10,17 +10,12 @@ #include #include #include -#include -#include "common/thread.h" #include "core/core.h" #include "core/frontend/emu_window.h" class QKeyEvent; class QTouchEvent; -class QOffscreenSurface; -class QOpenGLContext; -class GMainWindow; class GRenderWindow; namespace VideoCore { @@ -197,7 +192,7 @@ private: /// Main context that will be shared with all other contexts that are requested. /// If this is used in a shared context setting, then this should not be used directly, but /// should instead be shared from - static std::shared_ptr main_context; + static std::unique_ptr main_context; /// Temporary storage of the screenshot taken QImage screenshot_image; diff --git a/src/citra_qt/configuration/configure_graphics.cpp b/src/citra_qt/configuration/configure_graphics.cpp index 1a48e5c66..4f3dbaac5 100644 --- a/src/citra_qt/configuration/configure_graphics.cpp +++ b/src/citra_qt/configuration/configure_graphics.cpp @@ -119,7 +119,8 @@ void ConfigureGraphics::SetupPerGameUI() { ui->toggle_accurate_mul->setEnabled(Settings::values.shaders_accurate_mul.UsingGlobal()); ui->toggle_disk_shader_cache->setEnabled( Settings::values.use_disk_shader_cache.UsingGlobal()); - ui->toggle_vsync_new->setEnabled(Settings::values.use_vsync_new.UsingGlobal()); + ui->toggle_vsync_new->setEnabled(ui->toggle_vsync_new->isEnabled() && + Settings::values.use_vsync_new.UsingGlobal()); return; }