0

环境:
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
);

问题:hr几乎
S_OK。当加载许多文件时,有时它会超出 D3DXERR_INVALIDDATA。 我在谷歌上搜索,我发现这并不意味着内存不足。(内存不足是D3DERR_OUTOFVIDEOMEMORYE_OUTOFMEMORY) 许多答案说“文件损坏或格式异常”,但我不这么认为,因为错误发生在加载随机文件中。(“加载失败的文件”是下次加载成功,或者随机相反的情况)。

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

4

1 回答 1

2

解释你的答案:

D3DFMT_A8R8G8B8 不是 D3DFMT_DXT5。该格式的名称暗示它包含 4 个 8 位组件,因此是“R8”等。因此,您将所有文件转换为 32 位,占用的存储空间是 DXT5 的 4 倍。

碰巧使用 D3DFMT_FROM_FILE 意味着它将使用您在文件中指定的 DXT5。您也可以指定 D3DFMT_DXT5。这将具有自动将您碰巧加载的任何 R8G8B8A8(或任何其他格式)文件转换为正确的 DXT5 压缩格式的优势。

于 2012-08-12T08:21:14.757 回答