Xir*_*ema
5
这取决于你使用的是哪种显卡,以及你将它放入哪种模式,但一般来说,答案是1-3帧(或2-4,如果你计算被推入的帧数缓冲区作为框架).
- 没有Vsync或任何其他类型的双缓冲策略,没有任何强制要求在任何给定时间将任何超过1帧保留在内存中,一旦新帧被推入缓冲区就会被覆盖.
- 当启用VSync时,新帧被推入帧缓冲区的第二部分,并延迟执行任何将来的命令,直到"垂直同步"(因此显然名称)触发,此时两个帧被翻转.
- 第三种模式,对于OpenGL不常见但对Vulkan和DirectX用户来说很熟悉,称为"信箱模式",或者有时称为"三重缓冲",它总共保留两个"后缓冲区",共有三个缓冲区:
- 其中一个后台缓冲区保留用于垂直同步触发时.
- 另一个后台缓冲区直接接收完成的帧,没有延迟
- 每当发生垂直同步时,都会切换这两个后缓冲区的角色.
请注意,使用三重缓冲时,缓冲区已满时主机不会被阻止.
GPU可以选择缓冲额外的帧,就像在你的例子中一样,虽然这对于OpenK/DirectX11来说比Vulkan/DirectX12 +更常见,因为在后面这些API中,主机在什么方面更加明确. GPU应该这样做,我无法想象一个程序员会故意扩展帧缓冲区.除了Triple Buffering已经提供的功能之外,它还不是很清楚它会带来什么好处.