我通过指定交换链中后台缓冲区 0 的 ID3D11Texture2D*
创建了一个 ID3D11RenderTargetView
。但我不清楚调用 _pSwapChain->Present(0, 0)
后会发生什么。
据推测,ID3D11RenderTargetView
所指向的现在是前台缓冲区。 Present 是否会以某种方式更改 ID3D11RenderTargetView
对象以指向新的后台缓冲区,或者应用程序是否必须继续从交换链请求新的 0 后台缓冲区?我还没有找到关于 ID3D11RenderTargetView
应该如何始终指向新后台缓冲区的确切解释。我也不清楚在交换链中有多少缓冲区是有意义的。
最佳答案
基本上它是在 DirectX 11 中“自动”完成的。
参见 Anatomy of Direct3D 11 Create Device和 DX11 DeviceResources
在 DirectX 12 中情况并非如此,在 DirectX 12 中,您必须显式绑定(bind)到每个后备缓冲区,并确保帧的所有“正在运行”的视频内存都保留在原位,直到 GPU 完成该操作框架。这就是 DXGI 1.4 添加 IDXGISwapChain3::GetCurrentBackBufferIndex
的原因。
参见 Anatomy of Direct3D 12 Create Device和 DX12 DeviceResources
There are a few other swapchain 'evolution' changes between DX11 & DX12 style. See The Care and Feeding of Modern Swap Chains.
关于directx-11 - RenderTargetView 指向的后缓冲区是否会在 Present 之后自动更改?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65246961/