Direct3D12无法调用ClearRenderTargetView

时间:2017-09-29 14:36:31

标签: c++ directx directx-12

源代码:https://github.com/AinoMegumi/Direct3D12

我正在尝试初始化Direct3D12 Window。

在函数Direct3D12 :: OnFrameRender中(观看上面的源代码,Direct3D12.cpp第251行),

    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);
}

现在,我试图调用ClearRenderTargetView。但是,从KernelBase.dll抛出了未处理的异常。

我调查KernelBase.dll并检测谁抛出异常。

观看此asm转储 https://pastebin.com/YBJLMBxE

情景是

  1. 地址00007FF8E6380977致电
  2. 地址00007FF8E6368AF2系统调用
  3. 跳至地址00007FF8E6380977 !!!!
  4. 跳转到地址00007FF8E6368AE0
  5. 地址00007FF8E6368AF2系统调用,
  6. 错误消息是

    ハンドルされない例外が0x00007FF8E27F3C58(KernelBase.dll)で発生しました(Direct3D.exe内):0x0000087D(パラメーター:0x0000000000000000,0x00000028379BCE20,0x0000021B7FD80FB0)。

    使用ClearRenderTargetView和init窗口的正确方法是什么?

1 个答案:

答案 0 :(得分:0)

正确的RenderTargetView通话方案位于

之下
  1. 每次CD3DX12_CPU_DESCRIPTOR_HANDLE变量
  2. 将其传递给OMSetRenderTargets
  3. 致电ClearRenderTargetView
  4. https://github.com/AinoMegumi/Direct3D12/blob/eed1650b59aba61648e45758dc759a415dfb6b17/Direct3D/Direct3D12.cpp#L263-L266