如何使用 D3D11_FORMAT_SUPPORT
How to work with D3D11_FORMAT_SUPPORT
我想为我的阴影应用 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_COMPARISON
、D3D11_FORMAT_SUPPORT_RENDER_TARGET
和 D3D11_FORMAT_SUPPORT_DEPTH_STENCIL
。
另见 enter link description here
我简直不敢相信:"After setting I cannot run my program , it crashes without any errors"
运行在Debug模式下,一步步查看程序崩溃在哪一行。
device->CheckFormatSupport(DXGI_FORMAT_R24_UNORM_X8_TYPELESS,&pSup);
Windows 表示函数对值进行或运算。
所以您只需要 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
祝你好运。
我想为我的阴影应用 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_COMPARISON
、D3D11_FORMAT_SUPPORT_RENDER_TARGET
和 D3D11_FORMAT_SUPPORT_DEPTH_STENCIL
。
另见 enter link description here
我简直不敢相信:"After setting I cannot run my program , it crashes without any errors"
运行在Debug模式下,一步步查看程序崩溃在哪一行。
device->CheckFormatSupport(DXGI_FORMAT_R24_UNORM_X8_TYPELESS,&pSup);
Windows 表示函数对值进行或运算。
所以您只需要 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
祝你好运。