QGLWidget的QTimer,其他机器上的图纸和时间不正确

QTimer for QGLWidget, incorrect drawing and timing on other machines

本文关键字:不正确 时间 机器 QTimer 其他 QGLWidget      更新时间:2023-10-16

我有两个计时器来重新绘制QGLWidget并确定FPS

QObject::connect(&fpsTimer, SIGNAL(timeout()), this, SLOT(updateFps()));
fpsTimer.start(1000);
QObject::connect(&updateTimer, SIGNAL(timeout()), this, SLOT(updatePanel()));
updateTimer.start(0);

void GLPanel::updatePanel()
{
    updateBuffers();
    updateGL();
    frameCount++;
}

我还用每一帧的新数据更新vbos。

在我安装了Qt的机器上,我得到了一致的60 FPS,因为更新计时器将基于GUI线程启动。我试着将其设置为每15毫秒更新一次,而不是依赖GUI线程,但运气不佳。在其他机器上,它会上升到1000 FPS左右。

我遇到的另一个问题是,我的点在其他机器上绘制不正确。它们被画错了地方和颜色。至于这是与Qt还是OpenGL有关。。。?

有什么想法会导致这种情况吗?

在屏幕中间点击后的其他机器其他机器

点击一个点后工作开发机器工作开发机

他们看起来应该完全一样。

您的绘图计时器使用的间隔为0毫秒。因此程序会尽可能快地绘图。这就是为什么其他计算机具有非常高的帧速率。您的计算机很可能正在使用显示器驱动程序的vsync设置。Vsync将图形与监视器的刷新率同步,这就是为什么60 Hz帧速率。因此,您可以使用vsync设置将其他计算机的帧速率限制为60。

然而,一些旧的廉价显示卡根本不支持vsync。然后你需要改变定时器的间隔,例如15毫秒。它不会产生像vsync那样好的结果,但它比在1000赫兹下绘制要好得多。