Merge pull request #6410 from vitor-k/qt-vsync
citra_qt: fix vsync issues
This commit is contained in:
commit
6a0baef239
|
@ -5,12 +5,11 @@
|
|||
#include <glad/glad.h>
|
||||
|
||||
#include <QApplication>
|
||||
#include <QDragEnterEvent>
|
||||
#include <QHBoxLayout>
|
||||
#include <QKeyEvent>
|
||||
#include <QMessageBox>
|
||||
#include <QPainter>
|
||||
#include <fmt/format.h>
|
||||
#include <QWindow>
|
||||
#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<QOpenGLContext>();
|
||||
context->setShareContext(share_context);
|
||||
|
@ -387,7 +386,7 @@ static Frontend::EmuWindow::WindowSystemInfo GetWindowSystemInfo(QWindow* window
|
|||
return wsi;
|
||||
}
|
||||
|
||||
std::shared_ptr<Frontend::GraphicsContext> GRenderWindow::main_context;
|
||||
std::unique_ptr<Frontend::GraphicsContext> 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<OpenGLSharedContext>();
|
||||
main_context = std::make_unique<OpenGLSharedContext>();
|
||||
}
|
||||
|
||||
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!"),
|
||||
|
|
|
@ -10,17 +10,12 @@
|
|||
#include <mutex>
|
||||
#include <QThread>
|
||||
#include <QWidget>
|
||||
#include <QWindow>
|
||||
#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<Frontend::GraphicsContext> main_context;
|
||||
static std::unique_ptr<Frontend::GraphicsContext> main_context;
|
||||
|
||||
/// Temporary storage of the screenshot taken
|
||||
QImage screenshot_image;
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
||||
|
|
Reference in New Issue