0

具有双缓冲的 OpenGL 应用程序如何实现超过 60 fps(显示刷新限制)?
它是否取决于驱动程序的实现,即它是使用双缓冲还是三重缓冲?

考虑下一个应用程序主循环:

while (1) {
  draw_scene();
  swap_buffers(); 
}

如果我不使用显示 vsync 的花哨同步并且不想在显示图像时撕裂,则循环中的第二个语句是强制性的。通过这样的循环,我的 fps 与驱动程序实现相关:使用双缓冲,管道会停止,我存档大约 60 fps,而使用三重缓冲不会发生停止,我的 fps 仅取决于我的视频卡吞吐量。因此,如果需要归档高 fps opengl 应用程序,我应该在应用程序内实现三重缓冲。我对吗?

4

1 回答 1

2

OpenGL 应用程序如何使用双缓冲存档超过 60 fps(显示刷新限制)?

通过禁用与​​显示垂直回扫的同步。

使用双缓冲管道会停止,我存档大约 60 fps,而使用三重缓冲不会发生停止,我的 fps 仅取决于我的视频卡吞吐量。

双缓冲和三缓冲之间的唯一区别是“队列中”用于显示的帧数量。实际上,它增加了另一帧延迟。但是总帧率没有增加。此外,尝试每秒渲染比显示设备可以处理的更多帧也没有什么意义。

缓冲区交换不会停止管道!停止流水线意味着流水线中的某些操作会迫使设备刷新整个流水线,并且必须重放大量操作,从而降低总吞吐量。然而,缓冲区交换是一个同步点,这意味着它等待管道完成。这实际上是可取的,因为它给你的 GPU 和驱动程序一些时间来做其他事情,比如清理标记为释放和类似的内存。SwapBuffers 块的持续时间也有利于您的程序进程,因为这为程序中的其他线程提供了 CPU 时间,可用于处理用户输入、I/O、网络等。

于 2012-09-14T11:38:29.807 回答