环境:
i5 750
DDR3 4G
Win7 Pro 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_OUTOFVIDEOMEMORY或E_OUTOFMEMORY)
许多答案都说“文件损坏或格式异常”,但我不这样认为,因为该错误发生在加载随机文件中。 (“加载失败的文件”将在下一次成功加载,或者随机情况相反)。
有什么问题,我该怎么办?
我真的很慌张帮助我!
最佳答案
解释您的答案:
D3DFMT_A8R8G8B8不是D3DFMT_DXT5。格式的名称意味着它包含4个8位的分量,因此每个都是“ R8”等。因此,您将所有文件转换为32位,占用的存储空间是DXT5的4倍。
简而言之,使用D3DFMT_FROM_FILE意味着它将使用您在文件中指定的DXT5。您还可以指定D3DFMT_DXT5。这将具有自动将您碰巧加载的任何R8G8B8A8(或任何其他格式)文件转换为正确的DXT5压缩格式的优势。