首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >深度缓冲区作为纹理- "D3D11错误:格式在创建视图时无效“

深度缓冲区作为纹理- "D3D11错误:格式在创建视图时无效“
EN

Stack Overflow用户
提问于 2015-08-14 00:32:40
回答 1查看 3.3K关注 0票数 0

我试图使用深度缓冲区作为纹理第二次在我的阴影。

根据正式文件 (“将深度模板缓冲区读取为纹理”一段),我将D3D11_TEXTURE2D_DESC.Format设置为DXGI_FORMAT_R24G8_TYPELESS (正如之前使用深度缓冲区作为纹理时的DXGI_FORMAT_D24_UNORM_S8_UINT一样):

代码语言:javascript
复制
D3D11_TEXTURE2D_DESC descDepth;
ZeroMemory(&descDepth, sizeof(descDepth));
descDepth.Width = width;
descDepth.Height = height;
descDepth.MipLevels = 1;
descDepth.ArraySize = 1;
descDepth.Format = DXGI_FORMAT_R24G8_TYPELESS; //normally it was DXGI_FORMAT_D24_UNORM_S8_UINT
descDepth.SampleDesc.Count = antiAliasing.getCount();
descDepth.SampleDesc.Quality = antiAliasing.getQuality();
descDepth.Usage = D3D11_USAGE_DEFAULT;
descDepth.BindFlags = D3D11_BIND_DEPTH_STENCIL | D3D11_BIND_SHADER_RESOURCE;
descDepth.CPUAccessFlags = 0;
descDepth.MiscFlags = 0;

ID3D11Texture2D* depthStencil = NULL;
result = device->CreateTexture2D(&descDepth, NULL, &depthStencil);

results成功了。然后,我尝试为缓冲区创建着色器资源视图:

代码语言:javascript
复制
D3D11_SHADER_RESOURCE_VIEW_DESC shaderResourceViewDesc;
//setup the description of the shader resource view
shaderResourceViewDesc.Format = DXGI_FORMAT_R32_FLOAT;
shaderResourceViewDesc.ViewDimension = antiAliasing.isOn() ? D3D11_SRV_DIMENSION_TEXTURE2DMS : D3D11_SRV_DIMENSION_TEXTURE2D;
shaderResourceViewDesc.Texture2D.MostDetailedMip = 0;
shaderResourceViewDesc.Texture2D.MipLevels = 1;

//create the shader resource view.
device->CreateShaderResourceView(depthStencil, &shaderResourceViewDesc, &depthStencilShaderResourceView);

不幸的是,这会产生一个错误:

D3D11错误: ID3D11Device::CreateShaderResourceView:格式(0x29,R32_FLOAT)在创建视图时无效;它不是资源格式(0x2c,R24G8_TYPELESS)中可转换的完全限定格式。STATE_CREATION错误#127: CREATESHADERRESOURCEVIEW_INVALIDFORMAT D3D11错误: ID3D11Device::CreateShaderResourceView:返回E_INVALIDARG,意味着无效参数被传递。STATE_CREATION错误#131: CREATESHADERRESOURCEVIEW_INVALIDARG_RETURN

我还试着用DXGI_FORMAT_R24G8_TYPELESSDXGI_FORMAT_D24_UNORM_S8_UINTDXGI_FORMAT_R8G8B8A8_UNORM作为shaderResourceViewDesc.Format

,问题在哪里?,我在跟踪文档,但我没有看到它。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-08-14 05:58:34

DXGI_FORMAT_R24G8_TYPELESSDXGI_FORMAT_R32_FLOAT格式不是“强制转换兼容的”。这种无类型格式只与DXGI_FORMAT_D24_UNORM_S8_UINTDXGI_FORMAT_R24_UNORM_X8_TYPELESSDXGI_FORMAT_X24_TYPELESS_G8_UINT兼容。

DXGI_FORMAT_R32_TYPELESSDXGI_FORMAT_D32_FLOATDXGI_FORMAT_R32_FLOAT兼容。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32000590

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档