我有两个计时器来重新绘制 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有关...?
关于什么会导致这种情况有什么想法吗?
点击屏幕中间后的其他机器 Other machines
点击一个点后运行 Dev Machine Working Dev Machine
它们应该看起来完全一样。
最佳答案
您的绘图计时器使用 0 毫秒的间隔。所以程序会尝试尽可能快地绘制。这就是为什么其他计算机具有非常高的帧速率的原因。您的计算机很可能正在使用显示驱动程序的 vsync环境。 Vsync 会将绘图与显示器的刷新率同步,这就是 60 Hz 帧率的原因。因此,您可以使用 vsync 设置将其他计算机的帧速率限制为 60。
然而,一些旧的和廉价的显示卡根本不支持垂直同步。然后您需要更改计时器的间隔,例如更改为 15 毫秒。它不会产生像 vsync 那样好的结果,但它比以 1000 Hz 绘制要好得多。
关于c++ - QTimer for QGLWidget,在其他机器上的绘图和计时不正确,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15033290/