Microsoft DirectX 8.0 (C++) |
ここでは、圧縮したテクスチャ フォーマットの内部組織について説明する。圧縮フォーマット間の変換には D3DX 関数を使用するため、これらの情報を詳しく知る必要はない。ただし、圧縮したサーフェス データを直接処理する場合は、この情報が役立つ。
Direct3D では、テクスチャ マップを 4 × 4 のテクセル ブロックに分割するために圧縮フォーマットを使用する。テクスチャに透過性が含まれない場合 (不透明)、または透過性が 1 ビット アルファで指定される場合、8 バイト ブロックがテクスチャ マップ ブロックを表す。テクスチャ マップに透過型テクセルが含まれない場合、アルファ チャネルを使用して 16 バイト ブロックがテクスチャ マップ ブロックを表す。
注 あらゆる単一のテクスチャでは、16 テクセルのグループごとに 64 ビットまたは 128 ビットとして格納されるデータを指定しなくてはならない。64 ビット ブロック (つまり、フォーマット DXT1) がテクスチャ用に使用される場合、いくつかのテクスチャのブロックごとに不透明と 1 ビット アルファ フォーマットを組み合わせることができる。つまり、色 0 と色 1 の符号なし整数のマグニチュードの比較は、16 テクセルの各ブロックごとに実行される。
128 ビット ブロックを使用する場合、テクスチャ全体にアルファ チャネルを明示的 (フォーマット DXT2 または DXT3) に、または補間したモード (フォーマット DXT4 または DXT5) で指定しなくてはならない。色の場合と同様、補間したモードを選択すると、8 つの補間したアルファか、ブロック単位で使用できる 6 つの補間したアルファ モードのいずれかを使用できる。さらに、アルファ 0 とアルファ 1 の大きさの比較は、ブロックごとに行われる。
DXTn フォーマットのピッチは、DirectX 7 で返されていたものとは異なっている。今後は、ブロック 1 行のピッチのことである。たとえば、幅が 16 とすると、ピッチは 4 ブロック (DXT1 は 4*8、DXT2 〜 5 は 4*16) となる。