Direct3D12无法致电ClelenderTargetView

Direct3D12 failed to call ClearRenderTargetView

本文关键字:ClelenderTargetView Direct3D12      更新时间:2023-10-16

源代码:https://github.com/ainomegumi/direct3d12

2 2 2 2 2

我正在尝试启动Direct3D12窗口。

在函数direct3d12 :: onframerender中

    void Direct3D12::OnFrameRender() {
    this->CommandList->RSSetViewports(0, &this->ViewPort); 
    SetResourceBarrier(D3D12_RESOURCE_STATE_PRESENT, D3D12_RESOURCE_STATE_RENDER_TARGET);
    float ClearColor[4] = { static_cast<float>(0xff) / 255.0f, static_cast<float>(0xc0) / 255.0f, static_cast<float>(0xcb) / 255.0f, 1.0f };
    this->CommandList->ClearRenderTargetView(this->CPUDescriptorHandle, ClearColor, 0, nullptr); // ここで落ちてる
    SetResourceBarrier(D3D12_RESOURCE_STATE_RENDER_TARGET, D3D12_RESOURCE_STATE_PRESENT);
    this->Present(0);
}

现在,我尝试调用RenderTargetView。但是,从kernelbase.dll刺了未手的异常。

i调查kernelbase.dll并检测到谁投掷例外。

观看此ASM转储https://pastebin.com/ybjlmbxe

场景是

  1. 在地址00007FF8E6380977呼叫
  2. 在地址上00007FF8E6368AF2 SYSCALL
  3. 跳到地址00007FF8E6380977 !!!!
  4. 跳到地址00007FF8E6368AE0
  5. 在地址上00007FF8E6368AF2 SYSCALL,

错误消息是

未处理的例外发生在0x007ff8e27f3c58(kernelbase.dll)中(在Direct3D.exe中):0x0000087D(参数:0x000000000000000000,0x0000000028379BCE20,0x00000028379BCE20,0X00021B7FD80FB 0)。

使用ClenderTargetView和Init Window的正确方法是什么?

正确的 RenderTargetView呼叫方案在

下方
  1. 使CD3DX12_CPU_DESCRIPTOR_HANDLE变量每次
  2. 将其传递给OMSetRenderTargets
  3. 致电ClearRenderTargetView

https://github.com/ainomegumi/direct3d12/blob/ed1650b59aba61648e4575758dc759a4159a415dfb6b17/direct3d/direct3d/direct3d/direct3d12.cpppppp#l266

相关文章:
  • 没有找到相关文章