次の方法で共有


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

圧縮テクスチャのサポートの決定

アダプターをテストするには、DXT1、DXT2、DXT3、DXT4、または 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 を使用して取得されたサーフェスにイメージを読み込むことができます。 これらの関数は、圧縮テクスチャ形式との間の変換を処理します。

DirectX SDK に付属の DirectX テクスチャ エディター (Dxtex.exe) を使用して、圧縮テクスチャ (DDS) ファイルを作成および変換できます。 Dxtex.exeを取得し、DirectX SDK からその詳細を確認できます。 DirectX SDK の詳細については、「 DirectX SDK はどこにありますか?」を参照してください。

この動作の利点は、特定の幅と高さのサーフェスに必要なストレージの量を特定の形式で計算することなく、アプリケーションが圧縮サーフェスの内容をファイルにコピーできることです。

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

FOURCC 説明 アルファプリマルチプライド?
DXT1 不透明/1 ビットアルファ 該当なし
DXT2 明示的なアルファ はい
DXT3 明示的なアルファ いいえ
DXT4 補間されたアルファ はい
DXT5 補間されたアルファ いいえ

 

非乗算形式から事前乗算形式にデータを転送すると、Direct3D はアルファ値に基づいて色をスケーリングします。 事前乗算形式から非乗算形式へのデータ転送はサポートされていません。 事前乗算されたアルファ ソースから非プリ乗算アルファ変換先にデータを転送しようとすると、メソッドは D3DERR_INVALIDCALLを返します。 事前乗算されたアルファ ソースからアルファを持たない変換先にデータを転送すると、アルファでスケーリングされたソース カラー コンポーネントがそのままコピーされます。

圧縮テクスチャ サーフェスの展開

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

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

圧縮テクスチャ リソース