Qt5:禁用vsync

Qt5:禁用vsync,qt,vsync,Qt,Vsync,我想从QOpenGLContext格式中禁用vsync,以便于集成第三方渲染系统 似乎是Qt中唯一相关的参数 我尝试了几种方法来实现这一点,但即使我在早期阶段(在QMainWindow构造之前)设置了QSurfaceFormat::swapInterval(0),那么QOpenGLContext::create()调用也在恢复它 // at application startup, before creating the Qt windows (or in MyQWindow construct

我想从QOpenGLContext格式中禁用
vsync
,以便于集成第三方渲染系统

似乎是Qt中唯一相关的参数

我尝试了几种方法来实现这一点,但即使我在早期阶段(在
QMainWindow
构造之前)设置了
QSurfaceFormat::swapInterval(0)
,那么
QOpenGLContext::create()
调用也在恢复它

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

有没有办法强制禁用vsync?

正如peppe在问题的评论中所建议的那样,QOpenGLContext实例创建后的QSurfaceFormat格式不幸与内部使用的实际格式不匹配


这意味着我实现的代码可能正在工作,但第二个调试语句显示的值错误。

注意:我在Mac和Windows上都尝试了,得到了相同的行为。最近的相关问题:我认为甚至不可能在Mac上禁用vsync?看,这似乎也有问题(它不会根据获得的GL上下文更新交换间隔)。嗯,对我来说这似乎是正确的。调用QOpenGLContext::create()函数()时,将使用预期的格式()调用QCocaglContext,然后将交换间隔提供给OpenGL框架()我是否遗漏了什么?对不起,请忽略该注释。我把这行读作>0,而不是>=0。不管怎么说,它似乎没有在下面重新阅读,所以在创建上下文后得到的格式并不能反映您真正得到的内容!请打开错误报告以修复此问题!:(
// 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
)