gpt4 book ai didi

c++ - D3DXERR_INVALIDDATA 发生

转载 作者:行者123 更新时间:2023-11-28 03:35:32 24 4
gpt4 key购买 nike

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

项目:
使用 DXT5(A8R8G8B8) dds 格式的角色 Sprite 图像的游戏项目。
一个sprite每帧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)
许多答案说“文件损坏或格式异常”,但我不这么认为,因为错误发生在加载随机文件时。 ('load failed file'为下次加载成功,反之随机)。

有什么问题,我该怎么办?
我真的很 panic 救救我!

最佳答案

解释你的答案:

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

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

关于c++ - D3DXERR_INVALIDDATA 发生,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10980659/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com