为什么具有多个后缓冲区对性能更好

Why having multiple back buffers is better for performance?

本文关键字:缓冲区 性能 更好 为什么      更新时间:2023-10-16

向我解释一些我还不太明白的东西。我读到在DirectX中有多个后缓冲区对性能更好。

它说,当前缓冲区被绘制到屏幕上时,假设你已经将所有内容都渲染到后缓冲区中,后缓冲区已经准备好了,但很明显,你必须等到前缓冲区完全绘制出来,才能确保不会发生撕裂。因此,它不再等待,而是开始渲染到另一个后台缓冲区中。

在我对C++的看法中,唯一会发生的事情就是必须为更多的后台缓冲区分配更多的内存。所以,再一次,

为什么具有多个后缓冲区对性能更好?

因此,如果你只有两个缓冲区,一个正在显示,另一个正在绘制。一旦GPU完成了当前的后缓冲区,它就必须等到后缓冲区变成前缓冲区才能绘制下一帧。如果您不关心vsync,这不是问题,因为您只需要在后台缓冲区完成后进行交换,然后使用旧的前端缓冲区作为后台缓冲区。

现在,想象一下,我们只能在完全的vsync下交换缓冲区,这样我们就不会在交换过程中撕裂缓冲区。所以我们有一个60帧/秒的vsync,或者16毫秒来绘制后缓冲区。想象一下,根据一些情况,有时画一帧需要14毫秒,有时需要19毫秒。如果需要19毫秒,我们必须等待13毫秒,直到下一个16毫秒的间隔出现,GPU才能绘制任何东西。

有了三个缓冲区,GPU可以立即开始绘制第三帧,即使我们错过了时隙,这意味着在帧速率显著下降之前,我们还有13毫秒的时间来完成。所以平均帧速率更高。

显然,N帧缓冲区的一个缺点是,在显示当前帧之前,第N帧必须"准备好绘制"N-1帧,否则将没有任何好处。

因此,如果帧速率相当慢,屏幕上出现的实际图形将是"N-1帧旧"。考虑一些非常慢的绘画,每帧需要半秒。如果你在有3帧缓冲系统的FPS游戏中开枪,那么直到你开枪1.5秒(三帧后),子弹才会真正出现。幸运的是,FPS游戏通常不会运行得那么慢…;)

【然而,值得注意的是,"性能"通常比"每秒帧数"更复杂——例如,GPU使用、功耗和GPU使用是需要考虑的重要因素】