0

ここにある Direct3D12 の Rastertek チュートリアルに従っています

すべてのコードが彼のものと同じであることを再確認しましたが、コマンド リストで問題が発生しています。バック バッファをクリアした直後にコマンド リストを閉じると、メソッドは をID3D12GraphicsCommandList::Close()返しますE_INVALIDARG。これは、コマンド リストの記録中に何か問題があったことを意味します。しかし、私がしていることは何も間違っているようには見えません。

D3D12_RESOURCE_BARRIER Barrier;

hr = CommandAllocator->Reset(); HANDLE_HR(__LINE__);

hr = CommandList->Reset (
    CommandAllocator,
    nullptr
); HANDLE_HR(__LINE__);

Barrier.Flags = D3D12_RESOURCE_BARRIER_FLAG_NONE;
Barrier.Transition.pResource = RenderTargetResource[BufferIndex];
Barrier.Transition.StateBefore = D3D12_RESOURCE_STATE_PRESENT;
Barrier.Transition.StateAfter = D3D12_RESOURCE_STATE_RENDER_TARGET;
Barrier.Transition.Subresource = D3D12_RESOURCE_BARRIER_ALL_SUBRESOURCES;
Barrier.Type = D3D12_RESOURCE_BARRIER_TYPE_TRANSITION;

CommandList->ResourceBarrier(1, &Barrier);

RenderTargetViewPtr.ptr = RenderTargetViewHandle.ptr + BufferIndex * RenderTargetBytes;

CommandList->OMSetRenderTargets(1, &RenderTargetViewPtr, FALSE, nullptr);

FLOAT color[] = { 1.0, 1.0, 1.0, 1.0 };

CommandList->ClearRenderTargetView(RenderTargetViewHandle, color, 0, nullptr);

Barrier.Transition.StateBefore = D3D12_RESOURCE_STATE_RENDER_TARGET;
Barrier.Transition.StateAfter = D3D12_RESOURCE_STATE_PRESENT;

CommandList->ResourceBarrier(1, &Barrier);

hr = CommandList->Close(); HANDLE_HR(__LINE__);

私のプロジェクト全体は、この github ブランチにあります。

このコードの問題は何ですか?

リソースの障壁が問題のようですが、どちらかというと無害です。コメントアウトしOMSetRenderTargets()ClearRenderTargetView()E_INVALIDARGから返されClose()ます。

ID3D12InfoQueueまた、インターフェイスを使用して、問題の原因を突き止めようとしました。エラーが返されたときにキューにメッセージがありません。他のエラーが発生したときにメッセージClose()表示されるため、インターフェイスが適切に機能していることを確認しました。

4

0 に答える 0