D3DXERR_INVALIDDATA occur

D3DXERR_INVALIDDATA occur

本文关键字:occur INVALIDDATA D3DXERR      更新时间:2023-10-16

environment:
i5 750
DDR3 4GWin7 专业版 x64 sp1
DXSDK 9.0c 2010
年 6 月GeForce GT240(驱动程序 275.33) 512MB
MSVC 2008 sp1

项目:
使用DXT5(A8R8G8B8) DDS格式的角色精灵图像的游戏项目。
一个精灵是每帧 512*512 的大小,每个帧都是彼此的文件。
(我们使用渲染的 3DSMAX 卡通着色器建模动画,3DSMAX 将每一帧渲染到彼此的文件中。
并以这种方式加载:

HRESULT hr = D3DXCreateTextureFromFileEx( m_pd3dDevice //LPDIRECT3DDEVICE9 m_pd3dDevice
        ,filename_upper.c_str() //std::wstring filename_upper
        ,D3DX_DEFAULT_NONPOW2   
        ,D3DX_DEFAULT_NONPOW2   
        ,1
        ,0
        ,D3DFMT_A8R8G8B8
        ,D3DPOOL_MANAGED
        ,D3DX_FILTER_NONE 
        ,D3DX_FILTER_NONE
        ,NULL
        ,&info   // D3DXIMAGE_INFO info                
        ,NULL
        ,&rsTexture //LPDIRECT3DTEXTURE9 rsTexture
);

问题:
人力资源几乎是S_OK。当加载许多文件时,有时会D3DXERR_INVALIDDATA
我在谷歌上搜索,我发现这不是超出记忆的手段。 (内存不足是D3DERR_OUTOFVIDEOMEMORYE_OUTOFMEMORY
许多答案说"文件损坏或格式异常",但我不这么认为,因为错误发生在加载随机文件中。("加载失败文件"在下次成功加载,或随机加载相反的情况)。

问题是什么,我该怎么办?
我真的很恐慌,帮帮我!

解释你的答案:

D3DFMT_A8R8G8B8不是D3DFMT_DXT5。该格式的名称意味着它包含 4 个组件,每个组件 8 位,因此称为"R8"等。 因此,您将所有文件转换为 32 位,占用的存储空间是 DXT4 的 5 倍。

碰巧使用,简单地说,D3DFMT_FROM_FILE意味着它将使用您在文件中指定的 DXT5。 您也可以指定D3DFMT_DXT5。 这样做的好处是可以自动将您碰巧加载的任何R8G8B8A8(或任何其他格式)文件转换为正确的 DXT5 压缩格式。