具有双缓冲的OpenGL应用程序如何实现超过60 fps(显示刷新限制)? 它是否依赖于驱动程序实现,即它是使用双缓冲还是三缓冲?
考虑下一个应用程序主循环:
while (1) {
draw_scene();
swap_buffers();
}
如果我不使用与显示vsync的某些花哨的同步并且在显示图像时不想撕裂,则循环中的第二个语句是必需的。通过这样的循环,我的fps与驱动程序实现相关:使用双缓冲,管道将停止并且我存档大约60 fps而使用tripple buffrering不会发生停顿并且我的fps仅依赖于我的视频吞吐量。因此,如果需要归档高fps opengl应用程序,我应该在应用程序内部实现三重缓冲。我是对的吗?
答案 0 :(得分:2)
具有双缓冲存档的OpenGL应用程序如何存档超过60 fps(显示刷新限制)?
禁用与显示垂直回扫的同步。
使用双缓冲管道将停止并且我存档大约60 fps而使用tripple buffrering不会发生停顿并且我的fps仅依赖于我的视频吞吐量。
双缓冲和三缓冲之间的唯一区别是“队列中”用于显示的帧数量。实际上,它增加了另一个延迟框架。但是,总帧速率不会增加。尝试每秒渲染的帧数比显示设备可以处理的帧数还要少。
缓冲区交换不会使管道停滞!管道失速意味着管道内的某些操作会强制设备冲洗整个管道,并且必须重放大量操作,从而降低总吞吐量。然而,缓冲区交换是一个同步点,这意味着它等待管道完成。这实际上是可取的,因为它为你的GPU和驱动程序提供了一些时间来做其他事情,比如清理标记为重新分配的内存等。持续时间SwapBuffers块也有利于程序进程,因为这为程序CPU时间中的其他线程提供了可用于处理用户输入,I / O,网络等的程序。