首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如果纹理格式的BC3_UNORM的分辨率不是4的倍数,我该怎么办?

如果纹理格式的BC3_UNORM的分辨率不是4的倍数,我该怎么办?
EN

Stack Overflow用户
提问于 2021-03-12 21:46:06
回答 1查看 68关注 0票数 0

enter image description here

我有一个分辨率为95x90,格式为DXGI_FORMAT_BC3_UNORM的纹理。我试图加载这个纹理,但得到了下面的错误。

D3D11错误: ID3D11Device::CreateTexture2D:使用以下格式(0x4d,BC3_UNORM)创建的Texture2D遇到资源维度的对齐限制。尺寸(宽度: 95,高度: 90)必须是(宽度: 4,高度: 4)的倍数。STATE_CREATION错误#101: CREATETEXTURE2D_INVALIDDIMENSIONS

我打开Painter应用程序并调整原始纹理的大小,这是没有意义的。有没有修复这个错误的好方法?

+

如果我使用Visual Studio加载纹理,它的维数是4的倍数。

enter image description here

当我使用DirectX Tex加载纹理时,它是不同的。

代码语言:javascript
运行
复制
auto hr = DirectX::CreateDDSTextureFromFile(Graphic::Device(), path.data(), &_texture, &_srv);
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-03-13 12:38:24

DirectX的正式规则是,BC压缩图像的“顶级”图像宽度和高度必须是4的倍数,但mipmap显然会导致非4的倍数。还有处理1x1、1x2、2x1和2x2像素情况的特殊规则。

DirectXTex可以对图片库大小的图像进行块压缩,以支持mipmap。

我的texconv工具中有一个专门针对这种情况的-fixbc4x4:开关。它在没有解压/压缩循环的情况下“调整”最高的mip级别,但它会丢失任何mip级别,所以如果你想重新生成它们,你最终将为此进行解压缩/压缩。

因此,简而言之,这将创建DDS纹理的一个版本,其顶层仅四舍五入为4x4倍数,而无需对块进行任何修改。

代码语言:javascript
运行
复制
texconv -fixbc4x4 -m 1 inputdds.dds

这将在不修改块的情况下修复最顶层,解压缩图像,生成mips,然后重新压缩。

代码语言:javascript
运行
复制
texconv -fixbc4x4 -m 0 inputdds.dds
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66601094

复制
相关文章

相似问题

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