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.
我通过指定交换链中后台缓冲区 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.