Solved vsync and QOpenGLContext
-
I would like to disable
vsync
from the QOpenGLContext format in order to facilitate the integration of a third party rendering system.QSurfaceFormat::swapInterval
seems to be the only related parameter in Qt.I tried several ways to implement this on Mac and Windows, but even if I set the
QSurfaceFormat::swapInterval(0)
at an early stage (before theQMainWindow
construction), then theQOpenGLContext::create()
call is restoring it.// at application startup, before creating the Qt windows (or in MyQWindow constructor) QSurfaceFormat format; format.setSwapBehavior(QSurfaceFormat::DoubleBuffer); format.setRedBufferSize(8); format.setGreenBufferSize(8); format.setBlueBufferSize(8); format.setAlphaBufferSize(8); format.setDepthBufferSize(24); format.setStencilBufferSize(8); format.setSwapInterval(0); QSurfaceFormat::setDefaultFormat(format); QMainWindow *w = new QMainWindow; w->show();
.
// at QWindow with QOpenGLContext creation, at the first frame update (or at the constructor) MyQWindow::initialization() { WbOpenGLContext *c = new WbOpenGLContext(this); c->setFormat(requestedFormat()); qDebug() << "requested format:" << c->format(); c->create(); qDebug() << "actual format:" << c->format(); }
.
# output requested format: QSurfaceFormat( version 2.0, options QFlags(), depthBufferSize 24, redBufferSize 8, greenBufferSize 8, blueBufferSize 8, alphaBufferSize 8, stencilBufferSize 8, samples -1, swapBehavior 2, swapInterval 0, profile 0 ) context format: QSurfaceFormat( version 3.0, options QFlags(0x4), depthBufferSize 24, redBufferSize 8, greenBufferSize 8, blueBufferSize 8, alphaBufferSize 8, stencilBufferSize 8, samples 0, swapBehavior 2, swapInterval 1, # Not what I asked profile 0 )
Is there a way to force vsync to be disabled?
-
I asked the question on stackoverflow too:
http://stackoverflow.com/questions/37319328/qt-5-disable-vsync/37327654?noredirect=1#comment62180852_37327654It seems that the second debug statement can not work because the WbOpenGLContext::format is not updated in the WbOpenGLContext::create() function.