0

ソースコード: https://github.com/AinoMegumi/Direct3D12

Direct3D12 ウィンドウを初期化しようとしています。

関数 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 から Unhandled 例外がスローされました。

KernelBase.dll を調査し、誰が例外をスローしたかを検出します。

この asm ダンプを見る https://pastebin.com/YBJLMBxE

シナリオは

  1. アドレス 00007FF8E6380977 で呼び出し
  2. アドレス 00007FF8E6368AF2 syscall で
  3. アドレス 00007FF8E6380977 にジャンプ!!!!
  4. アドレス 00007FF8E6368AE0 にジャンプ
  5. アドレス 00007FF8E6368AF2 システムコールで、

エラーメッセージは

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

ClearRenderTargetView と init ウィンドウを使用する正しい方法は何ですか?

4

1 に答える 1