在此处输入图像描述
我有一个纹理,分辨率是95x90,格式是DXGI_format_BC3UNORM。我试图加载这个纹理,但在下面得到一个错误。
D3D11错误:ID3D11Device::CreateTexture2D:使用以下格式(0x4d,BC3_UNORM(创建的Texture2D在资源的维度上受到对齐限制。尺寸(宽度:95,高度:90(必须是(宽度:4,高度:4(的倍数。[状态创建错误#101:CREATETEXTURE2D_INVALIDDIMENSIONS]
我打开Painter应用程序并调整原始纹理的大小是没有意义的。有没有好的方法来修复这个错误?
+
如果我使用Visual Studio加载纹理,它的维度是4的倍数。
在此处输入图像描述
当我用DirectX Tex.加载纹理时,情况就不同了
auto hr = DirectX::CreateDDSTextureFromFile(Graphic::Device(), path.data(), &_texture, &_srv);
DirectX的正式规则是BC压缩图像的"顶级"图像宽度必须是4的倍数;高度,但mipmaps显然会导致非四分之一的值。还有一些特殊规则用于处理1x1、1x2、2x1和2x2像素的情况。
DirectXTex可以阻止压缩artibrary大小的图像以支持mipmaps。
我的texconv工具中有一个-fixbc4x4:
开关,专门用于这种情况。它在没有解压缩/压缩周期的情况下"调整"最顶部的mip级别,但它会丢失任何mip级别。因此,如果你想重新生成它们,你最终会为此进行解压缩/压缩。
因此,简而言之,这将创建一个DDS纹理版本,其中只有最顶层四舍五入到4x4倍,而无需对块进行任何修改。
texconv -fixbc4x4 -m 1 inputdds.dds
这将在不修改块的情况下修复最顶层,解压缩图像,生成mips,然后重新压缩。
texconv -fixbc4x4 -m 0 inputdds.dds