次の方法で共有


圧縮テクスチャーの使用 (Direct3D 9)

圧縮テクスチャー サポートの確認

アダプターをテストするには、DXT1 ~ DXT5 を使用するピクセル フォーマットを指定します。IDirect3D9::CheckDeviceFormat が D3D_OK を返した場合、デバイスでは、そのフォーマットを使用する圧縮テクスチャー サーフェスから直接テクスチャーを作成することができます。この場合、IDirect3DDevice9::SetTexture メソッドを呼び出すことによって、Direct3D で直接、圧縮テクスチャー サーフェスを使用できます。次のコード例は、アダプターが圧縮テクスチャー フォーマットをサポートしているかどうかを確認する方法を示したものです。

 BOOL IsCompressedTextureFormatOk( D3DFORMAT TextureFormat,                                    D3DFORMAT AdapterFormat )  {     HRESULT hr = pD3D->CheckDeviceFormat( D3DADAPTER_DEFAULT,                                           D3DDEVTYPE_HAL,                                           AdapterFormat,                                           0,                                           D3DRTYPE_TEXTURE,                                           TextureFormat);      return SUCCEEDED( hr ); } 

デバイスが圧縮テクスチャー サーフェスからのテクスチャー処理をサポートしていない場合でも、テクスチャー データを圧縮フォーマット サーフェスに格納することができます。ただし、テクスチャー処理に使用する前に、圧縮テクスチャーをサポートされているフォーマットに変換する必要があります。

圧縮テクスチャーの作成

アダプターで圧縮テクスチャー フォーマットをサポートするデバイスを作成したら、圧縮テクスチャー リソースを作成することができます。IDirect3DDevice9::CreateTexture を呼び出し、Format パラメーターに圧縮テクスチャー フォーマットを指定します。

イメージをテクスチャー オブジェクトにロードする前に、IDirect3DTexture9::GetSurfaceLevel メソッドを呼び出して、テクスチャー サーフェスへのポインターを取得します。

ここで、D3DXLoadSurfacexxx 関数を使用して、IDirect3DTexture9::GetSurfaceLevel によって取得したサーフェスにイメージをロードすることができます。これらの関数は、圧縮テクスチャー フォーマット間の変換を処理します。

SDK に付属している DirectX テクスチャー エディター (Dxtex.exe) を使用すると、圧縮テクスチャー (DDS) ファイルを作成および変換できます。

この動作の利点は、アプリケーションで、特定の幅と高さを持つ特定のフォーマットのサーフェスに、どの程度のストレージ容量が必要かを計算しなくても、圧縮サーフェスの内容をファイルにコピーできる点です。

次の表に、5 種類の圧縮テクスチャーを示します。データの保存方法の詳細については、「圧縮テクスチャー フォーマット (Direct3D 9)」を参照してください。この情報が必要なのは、独自の圧縮ルーチンを作成する場合のみです。

FOURCC 説明 アルファが乗算済みかどうか
DXT1 不透明/1 ビット アルファ 該当せず
DXT2 明示的なアルファ
DXT3 明示的なアルファ
DXT4 補間アルファ
DXT5 補間アルファ

事前に乗算しないフォーマットから事前に乗算するフォーマットに変換する場合、Direct3D はアルファ値を基にカラーをスケーリングします。事前に乗算するフォーマットから、乗算しないフォーマットへのデータの変換はサポートされていません。アルファを事前に乗算したデータからアルファを事前に乗算していないデータに変換する場合、メソッドが D3DERR_INVALIDCALL を返します。アルファを事前に乗算したソースからアルファのないデータに変換する場合は、アルファによってスケーリングされたソース カラー成分はそのままコピーされます。

圧縮テクスチャー サーフェスの圧縮解除

テクスチャー サーフェスの圧縮と同様に、圧縮テクスチャーの圧縮解除は Direct3D のコピー サービスによって実行されます。

圧縮されたテクスチャー サーフェスを圧縮されていないテクスチャー サーフェスにコピーするには、関数 D3DXLoadSurfaceFromSurface を使用します。この関数は、圧縮されたサーフェスと圧縮されていないサーフェス間の圧縮と圧縮解除を処理します。