DirectX 12 用の DirectX ツール キットを使用して、個々の MSAA および HDR チュートリアル サンプルを正常にコンパイルおよび実行できます。ただし、 MSAA コンポーネントと HDR コンポーネントの関連コードを 1 つのGame.cppファイルにまとめると、デバッグ レイヤー メッセージでコンパイルが失敗します。
D3D12 エラー: ID3D12CommandList::ResolveSubresource: 指定された形式は、ソース リソースと互換性がありません。
SDR ディスプレイ モニターに HDR サンプル コードを使用しているため、トーン マッピングを適用する必要があります。呼び出しの順序に関しては、MSAA レンダー ターゲットの解決を試みる前に、HDR シーンを終了する呼び出しを行います。
// 3d rendering completed
m_hdrScene->EndScene(commandList);
if (m_msaa)
{
// Resolve the MSAA render target.
//PIXBeginEvent(commandList, PIX_COLOR_DEFAULT, L"Resolve");
auto backBuffer = m_deviceResources->GetRenderTarget();
...
次に、MSAA 解決ブロックに続いて、トーン マッピング ステートメントを次のように配置します。
// Unbind depth/stencil for sprites (UI)
auto rtvDescriptor = m_deviceResources->GetRenderTargetView();
commandList->OMSetRenderTargets(1, &rtvDescriptor, FALSE, nullptr);
// set texture descriptor heap in prep for sprite drawing
commandList->SetDescriptorHeaps(static_cast<UINT>(std::size(heaps)), heaps);
// apply tonemapping to hdr scene
switch (m_deviceResources->GetColorSpace())
{
default:
m_toneMap->Process(commandList);
break;
...
(3D シーン上で) 2D スプライトを描画するための記述子ヒープを設定する前にトーン マップを試行すると、次のエラーが発生することがわかりました。
D3D12 エラー: CGraphicsCommandList::SetGraphicsRootDescriptorTable: ハンドル 0x80000253a82ff205 を含む記述子ヒープ (0x0000025428203230:'DescriptorHeap') は、現在設定されている記述子ヒープ 0x0000025428203540:'EffectTextureFactory' とは異なります。[実行エラー #708: SET_DESCRIPTOR_TABLE_INVALID] D3D12:前のメッセージに対して有効になっているBREAK : [エラー実行 #708: SET_DESCRIPTOR_TABLE_INVALID]
HDR と MSAA を組み合わせる試みが初歩的だったことは認めますが、DirectX 12 ではこれらの機能に互換性がない、または相互に排他的である可能性があることを懸念しています。 HDR 用の浮動小数点レンダー ターゲットを使用します。m_msaaブール値をfalseに設定して MSAA コード ブロックをスキップすると、プログラムは HDR で正しく実行およびレンダリングされることに注意してください。
どなたかアドバイスをお待ちしております。プログラムに関する十分なコードやその他の詳細が必要な場合は、喜んで投稿を更新します。