RenderTargetView 指向的后缓冲区是否会在 Present 之后自动更改?

Does the backbuffer that a RenderTargetView points to automagically change after Present?

我通过指定交换链中后台缓冲区 0 的 ID3D11Texture2D* 创建了一个 ID3D11RenderTargetView。但我不清楚调用 _pSwapChain->Present(0, 0) 后会发生什么。

大概 ID3D11RenderTargetView 所指向的现在是前台缓冲区。 Present 是否以某种方式更改 ID3D11RenderTargetView 对象以指向新的后台缓冲区,或者应用程序是否必须继续从交换链请求新的 0 后台缓冲区?我还没有找到关于 ID3D11RenderTargetView 应该如何始终指向新后台缓冲区的确切解释。我也不清楚在交换链中有多少缓冲区是有意义的。

基本上是 'automagically' 在 DirectX 11 中完成的。

Anatomy of Direct3D 11 Create Device and DX11 DeviceResources

这在 DirectX 12 中是不正确的,您必须显式绑定到每个后台缓冲区,并确保帧的所有 'in flight' 视频内存都保留在原位,直到 GPU完成那个框架。这就是 DXGI 1.4 添加 IDXGISwapChain3::GetCurrentBackBufferIndex.

的原因

Anatomy of Direct3D 12 Create Device and DX12 DeviceResources

There are a few other swapchain 'evolution' changes between DX11 & DX12 style. See The Care and Feeding of Modern Swap Chains.