Qt: Improve GL syncing

This commit is contained in:
Vicki Pfau 2019-05-21 22:32:24 -07:00
parent 2781a2a9f9
commit 787c99b949
3 changed files with 7 additions and 3 deletions

View File

@ -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();

View File

@ -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) {

View File

@ -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);
}