D3D12:是什么决定交换链的后台缓冲区?

时间:2019-10-27 14:01:13

标签: render framebuffer direct3d12

调用IDXGISwapChain :: Present()时,我在理解交换链返回缓冲区序列时遇到问题。

在我跟随的教程中,它在交换链中有2个缓冲区(双缓冲)。说明了当调用IDXGISwapChain :: Present()时,当前的前缓冲区成为后缓冲区,而当前的后缓冲区成为前缓冲区。

                          Present() called
Buffer[0] : Front Buffer      \  /         Buffer[0] : Back Buffer
                               \/
                               /\
Buffer[1] : Back Buffer       /  \         Buffer[1] : Front Buffer

在有2个缓冲区的情况下,只要一个缓冲区是前缓冲区,则另一个缓冲区是后缓冲区。因此,这并不令人困惑。 但是当我想到多种缓冲情况时,我感到困惑。

问题1。如果我假设交换链中有3个缓冲区(三重缓冲区),那么其他2个缓冲区中的哪一个将成为后备缓冲区?

根据本文,后台缓冲区的顺序为0、1、2、0、1、2,依此类推。并且顺序由DXGI_PRESENT值确定。 http://milty.nl/grad_guide/basic_implementation/d3d12/rendering.html

另一篇文章说:“当使用DXGI_SWAP_EFFECT_FLIP_DISCARD翻转模型时,不能保证后备缓冲区索引的顺序是连续的。IDXGISwapChain3:: GetCurrentBackBufferIndex方法用于获取交换链当前后备缓冲区的索引。” https://www.3dgep.com/learning-directx-12-1/

                           Present() called
Buffer[0] : Front Buffer         \  /        Buffer[0] : Buffer
                                  \/
Buffer[1] : Back Buffer          \/\         Buffer[1] : Front Buffer
                                 /\
Buffer[2] : Buffer              /  \         Buffer[2] : Back Buffer

第二季度。我想知道是什么决定了后缓冲区索引吗?

如果后缓冲区始终是当前前缓冲区索引的下一个索引(除非下一个缓冲区索引超出了缓冲区总数),则没有问题。但是,如果下一个后备缓冲区可能是随机的,则似乎应该每次都使用IDXGISwapChain3 :: GetCurrentBackBufferIndex()来检查哪个缓冲区是当前后备缓冲区。

第三季度。当尚无前缓冲区显示时,Buffer [0]总是在第一次时总是后缓冲区吗?

非常感谢您提供详尽的解释。

0 个答案:

没有答案
相关问题