Direct3Dで2Dゲームを作成していて、D3DXCreateTextureFromFileInMemoryEx
ゲームの画像を読み込むために使用しています。ゲームには221KBのサイズの画像があります。しかし、私D3DXCreateTextureFromFileInMemoryEx
が画像をメモリにロードするために使用する場合、それらは使用のメモリ内で数十回になります。
では、どうすれば使用のメモリを減らすことができますか?
デフォルトのD3DXテクスチャ読み込み機能は非常に柔軟で、あらゆる種類の形式変換、圧縮/解凍、スケーリング、ミップマップ生成、およびその他のタスクを実行して、任意のソース画像を使用可能なテクスチャに変換することで役立ちます。
その変換(CPUコストとメモリ使用量の両方で高額になる可能性があります)を防止したい場合は、ソーステクスチャがすでに希望する形式になっていることを確認してから、フラグをD3DXに渡して、変換しないように指示する必要があります。変換またはスケーリングを実行します。
通常、D3Dが使用するすべてのテクスチャ形式をサポートする唯一のファイル形式はD3D形式のDDSであるため、すべてのソースアセットをDDSファイルとして保存する必要があります。テクスチャの作成に使用するソフトウェアがDDSファイルの保存を直接サポートしていない場合は、DirectX SDKに付属のツールを使用して変換を実行したり、独自のツールを作成したり、他のサードパーティの変換ツールを使用したりできます。
完全なDirectXSDKがインストールされている場合(2010年6月のSDK、最後のスタンドアロンリリース)、一緒にインストールされているDirectXTextureToolを使用できます。ただし、これはWindows 8 SDKには付属していません(DirectXSDKはWindowsSDKの一部になり、スタンドアロンSDKとしては出荷されません)。
ソースアセットを実行時に使用したい形式(おそらくDXTが圧縮され、完全なミップマップチェーンが事前に生成されている)のDDSファイルに変換したら、変換を回避するために適切なフラグをD3DXテクスチャロード関数に渡します。 。これは、合格する必要があることを意味します。
D3DX_DEFAULT_NONPOW2
Width
およびHeight
パラメータとパラメータ(ファイルから寸法を取得し、サイズを2の累乗に丸めないことを意味します)* D3DX_DEFAULT
。 MipLevels
D3DFMT_FROM_FILE
パラメータのFormat
場合(ファイルの正確なテクスチャ形式を使用することを意味します)。D3DX_FILTER_NONE
Filter
およびパラメータのMipFilter
場合(スケーリングまたはフィルタリングを実行しないことを意味します)。ソースアセットを実行時に使用する正確な形式に前処理し、それらをDDSファイルとして保存し、上記のすべてのフラグを設定して、変換を実行しないようにD3DXに指示すると、テクスチャの読み込みがはるかに速くなり、過度のメモリ使用なし。
*これには、ターゲットハードウェアが2つのテクスチャのパワーをサポートしていないか、2つのテクスチャのパワーのみを使用している必要があります。過去5年間のほとんどすべてのハードウェアは、2つのテクスチャの非パワーをサポートしているので、これはかなり安全なはずです。