到目前为止,在我查看的示例中,一些命令类似于:
- D3D12_DESCRIPTOR_HEAP_DESC 与 D3D12_DESCRIPTOR_HEAP_TYPE::D3D12_DESCRIPTOR_HEAP_TYPE_RTV
- ID3D12Device::CreateDescriptorHeap
- 带有 ID3D12DescriptorHeap::GetCPUDescriptorHandleForHeapStart 的 D3D12_CPU_DESCRIPTOR_HANDLE(可能还有 ID3D12Device::GetDescriptorHandleIncrementSize)
- (可选?)ID3D12Device::CreateRenderTargetView
- (可选?)IDXGISwapChain3::GetBuffer
- 将渲染内容安排到命令列表,注意 OMSetRenderTargets 和 DrawInstanced,然后关闭命令列表。
- ID3D12CommandQueue::ExecuteCommandLists
- (可选?)IDXGISwapChain3::Present
- 在栅栏上使用 ID3D12CommandQueue::Signal 调度信号
- 等待 GPU 完成 ID3D12Fence::SetEventOnCompletion 和 WaitForSingleObjectEx
如果可能,如何将步骤 4.1 替换为选择的缓冲区?即如何创建一个 ID3D12Resource* 并呈现给它,然后从中读取到一个 std::vector?(我假设是否可以忽略步骤 6.1,因为没有可供交换链呈现的渲染目标视图。在这种情况下,也许步骤 4 也是不必要的?也许只有 OMSetRenderTargets 很重要?)