我有两个计时器重新绘制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
他们都应该看起来完全一样。
答案 0 :(得分:1)
您的绘图计时器使用0 ms的间隔。所以程序试图尽可能快地绘制。这就是其他计算机具有非常高的帧速率的原因。您的计算机很可能使用显示驱动程序的vsync设置。 Vsync会将绘图与监视器的刷新率同步,这就是60 Hz帧速率的原因。因此,您可以使用vsync设置将其他计算机的帧速率限制为60。
然而,一些旧的和便宜的显示卡根本不支持vsync。然后,您需要更改计时器的间隔,例如更改为15毫秒。它不会产生与vsync一样好的结果,但它比以1000 Hz绘制要好得多。