1

我想为我的阴影应用 PCF,为此我需要将我的阴影贴图纹理格式设置为DXGI_FORMAT_R24_UNORM_X8_TYPELESS. 设置后我无法运行我的程序,它崩溃而没有任何错误。我认为原因是我的 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);
}

但是如何使用pSup. 我需要检查它是否支持D3D11_FORMAT_SUPPORT_SHADER_SAMPLE_COMPARISON,D3D11_FORMAT_SUPPORT_RENDER_TARGETD3D11_FORMAT_SUPPORT_DEPTH_STENCIL. 另请参阅在此处输入链接描述

4

1 回答 1

2

我不敢相信:“设置后我无法运行我的程序,它崩溃而没有任何错误”

在调试模式下运行并逐步检查程序在哪一行崩溃。

device->CheckFormatSupport(DXGI_FORMAT_R24_UNORM_X8_TYPELESS,&pSup);

Windows 说该函数对值进行 OR 运算。

所以你只需要 AND D3D11_FORMAT_SUPPORT 你想要的。例如,检查我的 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 用于深度模板
  • DXGI_FORMAT_R32_FLOAT 用于 ShaderResourceView

祝你好运。

于 2016-02-14T01:08:34.750 回答