1

シャドウに PCF を適用したいので、シャドウ マップ テクスチャ フォーマットを に設定する必要がありますDXGI_FORMAT_R24_UNORM_X8_TYPELESS。I cannot run my program を設定した後、エラーなしでクラッシュします。その理由は、私のGPUがそのフォーマットをサポートしていないためであり、そのためにフォーマットのサポートを確認したいと考えています。ここにリンクの説明を入力してください

これが私のコードです

UINT pSup;
result = device->CheckFormatSupport(DXGI_FORMAT_R24_UNORM_X8_TYPELESS,&pSup);
if (result != S_OK)
{
    MessageBox(NULL, L"Dont support that format", L"Error", MB_OK);
}

しかし、 で作業する方法pSupD3D11_FORMAT_SUPPORT_SHADER_SAMPLE_COMPARISOND3D11_FORMAT_SUPPORT_RENDER_TARGETおよび を サポートしているかどうかを確認する必要がありD3D11_FORMAT_SUPPORT_DEPTH_STENCILます。ここにもリンクの説明を入力してください

4

1 に答える 1

2

私はこれを信じることができません:「設定後、プログラムを実行できません。エラーなしでクラッシュします」

デバッグ モードで実行し、プログラムがクラッシュする行を段階的に確認します。

device->CheckFormatSupport(DXGI_FORMAT_R24_UNORM_X8_TYPELESS,&pSup);

Windows は、関数が値を OR すると言います。

したがって、必要な D3D11_FORMAT_SUPPORT を AND するだけです。たとえば、特定の形式が depthstencil と RenderTargetView でサポートされているかどうかを確認するには:

if(pSup & D3D11_FORMAT_SUPPORT_RENDER_TARGET)
{
    //render target supports that type
}
if(pSup & D3D11_FORMAT_SUPPORT_DEPTH_STENCIL)
{
   //depth stencil supports that type
}

問題に戻りますが、ハードウェアのサポートの問題ではないと思います。あなたは影とPCFについて話している。したがって、ステンシルビットは必要ないと思います。したがって、フォーマットとして DXGI_FORMAT_R24_UNORM_X8_TYPELESS を使用しないでください。

シャドウ マップをレンダリングするときは、可能な限り精度が必要なため、次を使用します。

  • テクスチャの DXGI_FORMAT_R32_TYPELESS
  • 深度ステンシルの DXGI_FORMAT_D32_FLOAT
  • ShaderResourceView の DXGI_FORMAT_R32_FLOAT

幸運を。

于 2016-02-14T01:08:34.750 に答える