0

我有两个计时器来重绘 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有关......?

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

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

点击一个点 Working Dev Machine 后的 Working Dev Machine

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

4

1 回答 1

1

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

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

于 2013-02-22T21:47:39.780 回答