QGLWidget的QTimer,其他机器上的绘图和定时不正确

时间:2013-02-22 21:15:53

标签: c++ qt opengl opengl-3

我有两个计时器重新绘制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线程触发。我已经尝试将其设置为每15ms更新一次,而不是依靠GUI线程而没有运气。在其他机器上它升至1000 FPS左右。

我遇到的另一个问题是我的观点在其他机器上无法正确绘制。他们被绘制在错误的地方和颜色。至于这是否与Qt或OpenGL有关......?

关于导致这种情况的任何想法?

点击屏幕中间的其他机器 Other machines

单击一个点后使用Dev Machine Working Dev Machine

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

1 个答案:

答案 0 :(得分:1)

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

然而,一些旧的和便宜的显示卡根本不支持vsync。然后,您需要更改计时器的间隔,例如更改为15毫秒。它不会产生与vsync一样好的结果,但它比以1000 Hz绘制要好得多。