2017-07-16 62 views
1

看起来大多数人推荐只使用2或3.这是因为3个以上的处理能力或其他东西(请原谅我对此有点新鲜)?在什么样的程序中你会使用3个以上的缓冲区?在java中使用createBufferStrategy()时,是否有助于拥有两个以上的缓冲区?有缺点吗?

2或3对我的程序正常工作,我只是好奇。

+0

记忆 - 要创建'大小相等的N'缓冲区,每个占用内存。您可能会发现,如果你有一个非常高的帧速率,更多的缓冲区是有用的,但一般2-3应该是绰绰有余大多数情况下 – MadProgrammer

+0

@MilesJohnson如果用户回答了你的问题,也请** **接受他的答案([接受答案:它是如何工作的?](https://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work))。如果不是,请说明还没有答案,这是StackOverflow非常重要的一部分,非常感谢。 – Zabuza

回答

4

一旦你知道缓冲策略的好处,其实它很容易理解。我们来看看这三种情况会发生什么。


单缓冲只有一个显示将图像数据写入到。相比之下双缓冲具有两个显示 s时,后台缓冲区

通常,应用程序的渲染和逻辑进程被拆分并且并行运行(例如显示器和图形卡)。可以说渲染过程具有轮询速率,每隔15ms在监视器上显示一个图像。想象一下,逻辑过程当前正在执行一些图像操作(绘制一个圆圈),但目前尚未完成(圆圈只绘制了一半)。在单缓冲您现在将看到屏幕上的一个半圆,因为渲染过程显示未完成的图像。

双缓冲逻辑过程只会写后缓冲区且仅当它已经结束了拉丝工艺成品它将标志着后台缓冲区。然后,您将后台缓冲区的内容与前台缓冲区交换,渲染过程现在将显示完成的图像,您将看不到任何工件。

Illustration of double buffering

所以优势双缓冲是,用户将不会看到任何文物,也没有像闪烁左右经验的东西。然而,这需要增加运行时间(交换操作),尤其是增加空间成本(整个图像的两倍)。


趁现在就像三重缓冲正值更加经济(3倍的图像空间),这将加快这一进程。这里你有两个后台缓冲区一个前台缓冲区

假设你使用双缓冲和当前正在交换的回缓冲区前缓冲你刚刚完成绘图操作。这可能需要一些时间,同时您的图形卡(这是非常快 - 比替换缓冲器软件代码更快)可以与未来绘图操作开始,但它不能作为缓冲被阻止。

随着三重缓冲显卡现在可能只是开始绘制其他缓冲作为一个后缓冲区一直是免费的,并没有参与任何交换机制。


现在我们知道事情是如何工作的,也不清楚为什么你没有看到超过3缓冲区(至少不会在普通的应用程序)的缓冲溶液 - 它只是不从的观点好处一般的概念。

增加的缓冲区量可以用三维虚拟现实的东西(立体图像),例如处理时可以看到,你可以使用双缓冲左和分别与四缓冲总结束右声道。

作为最后一个侧面说明VSYNC手段同步的前缓冲的交换与显示器的轮询率以减少撕裂效果。

+2

所有这一切也意味着,只要你有一个单一的区域作为你的输出(所以没有3D),拥有超过3个缓冲区几乎没有意义。 – biziclop

相关问题