在opengl应用中不断滞后

时间:2012-04-04 11:35:59

标签: c++ winapi opengl lag

我的opengl应用程序中有一些重复的延迟。 我正在使用win32 api创建窗口,我也在创建2.2上下文。 所以程序的主循环非常简单:

  • 清除颜色缓冲区
  • 画一个三角形
  • 交换缓冲区。

三角形在旋转,这就是我看到滞后的方式。 我的帧时间也不平滑,这可能是问题所在。 但我非常确定增量时间计算是正确的,因为我已经尝试了很多方法。

您认为这可能是图形驱动程序问题吗? 因为我的一个朋友运行几乎完全相同的程序,除了我做较少的计算+我正在使用标准的opengl着色器。 此外,他的程序使用的CPU功率比我的高,CPU%比我的更顺畅。

我还应该补充: 在我的笔记本电脑上,每隔约1秒就会出现相同的延迟,所以我可以看到某种模式。

1 个答案:

答案 0 :(得分:1)

抖动帧率有很多原因。在我的头顶:

  • 不在每帧结束时调用glFlush()
  • 其他正在运行的软件干扰
  • 在代码中处理某些图形驱动程序不喜欢的内容
  • 图形驱动程序中的错误
  • 使用标准的Windows时间函数及其可怕的分辨率

试试这些:

  • 尽可能多地杀死正在运行的程序。使用任务管理器中的进程选项卡( CTRL - SHIFT - ESC )。
  • 一点一点地减少你的程序正在做的工作量,看看它如何影响帧速率和显示的平滑度。
  • 如果可以,请尝试启用/停用垂直同步(您可以在图形卡的设置中执行此操作)以查看是否有帮助
  • 添加一些调试代码以输出绘制每个帧所花费的时间,并查看数字中是否存在异常,例如每20帧增加20ms,或随机帧花费100ms。