OpenGL双缓冲,同时超过60帧/秒



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

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

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

循环中的第二条语句是强制性的,如果我不使用display-vsync的高级同步,并且不想在显示图像时撕裂。有了这样一个循环,我的fps与驱动程序实现相关:使用双缓冲,管道会停滞,我归档大约60 fps,而使用tripple缓冲,不会发生停滞,我的fps只取决于我的视频卡吞吐量。所以,如果需要归档高fps的opengl应用程序,我应该在应用程序中实现三元组缓冲。我说得对吗?

OpenGL应用程序如何使用双缓冲归档超过60帧/秒(取消刷新限制)?

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

使用双缓冲时,管道会停滞,我归档大约60帧/秒,而使用三重缓冲时不会出现停滞,我的帧/秒仅取决于我的视频卡吞吐量。

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

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

最新更新