From 787c99b949b93e7263c53f483ff556dbd9684869 Mon Sep 17 00:00:00 2001 From: Vicki Pfau Date: Tue, 21 May 2019 22:32:24 -0700 Subject: [PATCH] Qt: Improve GL syncing --- src/platform/qt/CoreController.h | 3 +++ src/platform/qt/Display.cpp | 2 +- src/platform/qt/DisplayGL.cpp | 5 +++-- 3 files changed, 7 insertions(+), 3 deletions(-) diff --git a/src/platform/qt/CoreController.h b/src/platform/qt/CoreController.h index 59fd37ee5..978421249 100644 --- a/src/platform/qt/CoreController.h +++ b/src/platform/qt/CoreController.h @@ -98,6 +98,9 @@ public: void setInputController(InputController*); void setLogger(LogController*); + bool audioSync() const { return m_audioSync; } + bool videoSync() const { return m_videoSync; } + public slots: void start(); void stop(); diff --git a/src/platform/qt/Display.cpp b/src/platform/qt/Display.cpp index ee754c4f0..ed7c1fd38 100644 --- a/src/platform/qt/Display.cpp +++ b/src/platform/qt/Display.cpp @@ -20,7 +20,7 @@ Display* Display::create(QWidget* parent) { #if defined(BUILD_GL) || defined(BUILD_GLES2) || defined(USE_EPOXY) QSurfaceFormat format; format.setSwapInterval(1); - format.setSwapBehavior(QSurfaceFormat::TripleBuffer); + format.setSwapBehavior(QSurfaceFormat::SingleBuffer); #endif switch (s_driver) { diff --git a/src/platform/qt/DisplayGL.cpp b/src/platform/qt/DisplayGL.cpp index e0cf146a9..77439874a 100644 --- a/src/platform/qt/DisplayGL.cpp +++ b/src/platform/qt/DisplayGL.cpp @@ -264,11 +264,12 @@ PainterGL::PainterGL(VideoProxy* proxy, QWindow* surface, QOpenGLContext* parent if (!painter->m_gl->isValid()) { return; } + painter->m_gl->doneCurrent(); + painter->m_gl->swapBuffers(painter->m_surface); painter->m_gl->makeCurrent(painter->m_surface); #if defined(_WIN32) && defined(USE_EPOXY) epoxy_handle_external_wglMakeCurrent(); #endif - painter->m_gl->swapBuffers(painter->m_gl->surface()); }; m_backend->init(m_backend, 0); @@ -383,7 +384,7 @@ void PainterGL::draw() { m_backend->swap(m_backend); if (!m_delayTimer.isValid()) { m_delayTimer.start(); - } else if (m_gl->format().swapInterval()) { + } else if (m_gl->format().swapInterval() && m_context->videoSync()) { while (m_delayTimer.elapsed() < 15) { QThread::usleep(100); }