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

标签 directx-11 direct3d direct3d11

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

相关文章:

directx - 从 Direct2D 渲染目标获取 Direct3D 设备

c++ - 如何确保有一个 1 :1 pixel/texel ratio for a texture

c++ - DirectX 不正确的纹理

c++ - 使用 D3DPT_LINELIST 渲染 3D 线条

directx - 使用 DirectX (Direct3D11) 播放视频

resize - ID3D11On12Device::AcquireWrappedResources() 中的额外交换链缓冲区引用

c++ - Direct3D 发现 2D 屏幕坐标有效,但在受到压力时出现镜像故障

c++ - DirectX 11 Effects11.lib Effects11d.lib 链接器错误

c++ - D3D11DeviceContext 更新子资源上的模糊内核异常

directx - 从 DllMain 调用 IDirect3D9::CreateDevice() 挂起