如何使用D3D11_FORMAT_SUPPORT

时间:2016-02-13 07:53:38

标签: directx dxgi

我想为我的阴影应用PCF,为此我需要将阴影贴图纹理格式设置为DXGI_FORMAT_R24_UNORM_X8_TYPELESS。设置后我无法运行我的程序,它崩溃没有任何错误。我认为原因是我的GPU不支持格式化,为此我想检查格式支持。见enter link description here

这是我的代码

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_COMPARISOND3D11_FORMAT_SUPPORT_RENDER_TARGETD3D11_FORMAT_SUPPORT_DEPTH_STENCIL。 另请参阅enter link description here

1 个答案:

答案 0 :(得分:2)

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

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

if(bob.b == 0){
        printf("no non-zero number stored in b");
}

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

所以你只需要和你想要的D3D11_FORMAT_SUPPORT。 例如,检查我的depthstencil和RenderTargetView是否支持给定的格式:

device->CheckFormatSupport(DXGI_FORMAT_R24_UNORM_X8_TYPELESS,&pSup);

回到你的问题,我不认为这是你硬件的支持问题。你在谈论阴影和PCF。所以我认为你不需要模板位。因此,请勿使用DXGI_FORMAT_R24_UNORM_X8_TYPELESS作为格式。

渲染阴影贴图时,您希望尽可能精确,所以请使用:

  • 纹理的DXGI_FORMAT_R32_TYPELESS
  • 针对depthstencil的DXGI_FORMAT_D32_FLOAT
  • ShaderResourceView的DXGI_FORMAT_R32_FLOAT
祝你好运。