c++ - QTimer for QGLWidget,在其他机器上的绘图和计时不正确

标签 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 线程触发。我尝试将其设置为每 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/

相关文章:

c++ - x264项目编译

c++ - 将内存文件添加到 clang CompilerInstance

c++ - Qt:如何在委托(delegate)绘制事件中渲染时增加 QTablewidget?

c++ - 使用 QIODevice 的阻塞接口(interface)(QTcpSocket 和 QFile)时何时检查错误

c++ - glReadPixels 函数返回错误 1282 (GL_INVALID_OPERATION)

java - LWJGL - 当我的 3D 四边形距相机位置 10f 时,它们上出现白色边框

C++ OpenGL 游戏菜单链接对象

c++ - 为什么我得到 NaN 作为计算结果? (拉格朗日标准形式的分段线性插值)

c++ - 为什么 constexpr 方法可以正确返回其值在执行过程中发生变化的类成员?

qt - 如何在 QTextEdit 中将光标形状设置为 '>'?