Directx 如何减少D3DXCreateTextureFromFileInMemoryEx的内存使用?
我正在用Direct3D制作一个2D游戏,并使用Directx 如何减少D3DXCreateTextureFromFileInMemoryEx的内存使用?,directx,direct3d,Directx,Direct3d,我正在用Direct3D制作一个2D游戏,并使用D3DXCreateTextureFromFileInMemoryEx加载我的游戏图像。我的游戏中有221KB大小的图像。但是,当我使用D3DXCreateTextureFromFileInMemoryEx将图像加载到内存时,它们在内存中的使用次数越来越多 那么,如何减少使用内存呢?默认情况下,D3DX纹理加载功能非常方便,可以尝试执行各种格式转换、压缩/解压缩、缩放、mip贴图生成和其他任务,帮助您将任意源图像转换为可用纹理 如果要防止任何转换(
D3DXCreateTextureFromFileInMemoryEx
加载我的游戏图像。我的游戏中有221KB大小的图像。但是,当我使用D3DXCreateTextureFromFileInMemoryEx将图像加载到内存时,它们在内存中的使用次数越来越多
那么,如何减少使用内存呢?默认情况下,D3DX纹理加载功能非常方便,可以尝试执行各种格式转换、压缩/解压缩、缩放、mip贴图生成和其他任务,帮助您将任意源图像转换为可用纹理 如果要防止任何转换(CPU成本和内存使用都可能非常昂贵),则需要确保源纹理的格式与您想要的格式完全相同,然后将标志传递给D3DX,告知其不要执行任何转换或缩放 通常,唯一支持D3D使用的所有纹理格式的文件格式是D3D格式DDS,因此您需要将所有源资源保存为DDS文件。如果用于制作纹理的软件不直接支持保存DDS文件,则可以使用DirectX SDK附带的工具为您执行转换,编写自己的工具或使用其他第三方转换工具 如果已安装完整的DirectX SDK(2010年6月的SDK,最后一个独立版本),则可以使用随附的DirectX纹理工具。不过,Windows 8 SDK没有附带此功能(DirectX SDK现在是Windows SDK的一部分,并且不是作为独立SDK提供的) 一旦您将源资源转换为DDS文件,格式与您希望在运行时使用的格式完全相同(可能是DXT压缩,预生成完整的mipmap链),您就需要将正确的标志传递给D3DX纹理加载函数,以避免任何转换。这意味着您应该通过:
用于D3DX\u DEFAULT\u NONPOW2
和Width
参数,Height
用于D3DX\u DEFAULT
参数(意思是从文件中获取尺寸,不要将尺寸四舍五入到2的幂)*李>MipLevels
用于D3DFMT_FROM_FILE
参数(意味着使用文件中的精确纹理格式)格式
用于D3DX\u FILTER\u NONE
和FILTER
参数(表示不执行任何缩放或过滤)MipFilter