调用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]总是在第一次时总是后缓冲区吗?
非常感谢您提供详尽的解释。