我有一个分辨率为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的倍数。
当我使用DirectX Tex加载纹理时,它是不同的。
auto hr = DirectX::CreateDDSTextureFromFile(Graphic::Device(), path.data(), &_texture, &_srv);
发布于 2021-03-13 12:38:24
DirectX的正式规则是,BC压缩图像的“顶级”图像宽度和高度必须是4的倍数,但mipmap显然会导致非4的倍数。还有处理1x1、1x2、2x1和2x2像素情况的特殊规则。
DirectXTex可以对图片库大小的图像进行块压缩,以支持mipmap。
我的texconv工具中有一个专门针对这种情况的-fixbc4x4:
开关。它在没有解压/压缩循环的情况下“调整”最高的mip级别,但它会丢失任何mip级别,所以如果你想重新生成它们,你最终将为此进行解压缩/压缩。
因此,简而言之,这将创建DDS纹理的一个版本,其顶层仅四舍五入为4x4倍数,而无需对块进行任何修改。
texconv -fixbc4x4 -m 1 inputdds.dds
这将在不修改块的情况下修复最顶层,解压缩图像,生成mips,然后重新压缩。
texconv -fixbc4x4 -m 0 inputdds.dds
https://stackoverflow.com/questions/66601094
复制相似问题