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 the QMainWindow construction), then the QOpenGLContext::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_37327654

    It seems that the second debug statement can not work because the WbOpenGLContext::format is not updated in the WbOpenGLContext::create() function.


Log in to reply
 

Looks like your connection to Qt Forum was lost, please wait while we try to reconnect.