D3DFORMAT

D3DFORMAT

さまざまな種類のサーフェイス フォーマットを定義する。

構文

typedef enum _D3DFORMAT {
...(values)
} D3DFORMAT;

フォーマットにはいくつかの種類がある。

  • 符号なしフォーマット
  • 符号付きフォーマット
  • ミックス フォーマット
  • FOURCC フォーマット
  • バッファ フォーマット
  • 浮動小数点フォーマット
  • IEEE フォーマット
  • バック バッファまたはディスプレイ フォーマット

すべてのフォーマットは、左から右に最上位ビット (MSB) から最下位ビット (LSB) の順に示されている。たとえば、D3DFORMAT_ARGB は、MSB チャンネル A (アルファ) から LSB チャンネル B (青) の順である。サーフェイス データをトラバースするとき、データは LSB から MSB の順でメモリに格納される。これは、メモリ内のチャンネルの順序が、LSB (青) から MSB (アルファ) の順であることを意味する。

未定義のチャンネル (G16R16 や A8 など) を含むフォーマットのデフォルト値は 1 である。唯一の例外は A8 フォーマットで、3 つのカラー チャンネルに対して 000 に初期化される。

符号なしフォーマット

これらの定数は、ピクセル シェーダに対するテクスチャ アドレス命令のオペコードを参照する。

符号なしフォーマットのデータは、正でなければならない。符号なしフォーマットでは、赤 (R)、緑 (G)、青 (B)、アルファ (A)、輝度 (L)、パレット (P) データを組み合わせて使う。パレット データは、色パレットのインデックス作成に使うので、カラー インデックス データとも呼ぶ。

符号なしフォーマットのフラグ フォーマット
D3DFMT_R8G8B8 20 24 ビットの RGB ピクセル フォーマットで、チャンネルあたり 8 ビットを使う。
D3DFMT_A8R8G8B8 21 32 ビットのアルファ付き ARGB ピクセル フォーマットで、チャンネルあたり 8 ビットを使う。
D3DFMT_X8R8G8B8 22 32 ビットの RGB ピクセル フォーマットで、各色に 8 ビットが確保されている。
D3DFMT_R5G6B5 23 16 ビットの RGB ピクセル フォーマットで、赤に 5 ビット、緑に 6 ビット、青に 5 ビットを使う。
D3DFMT_X1R5G5B5 24 16 ビットのピクセル フォーマットで、そのうち 5 ビットは各色のために確保されている。
D3DFMT_A1R5G5B5 25 16 ビットのピクセル フォーマットで、各色に 5 ビット、アルファに 1 ビットが確保されている。
D3DFMT_A4R4G4B4 26 16 ビットの ARGB ピクセル フォーマットで、チャンネルごとに 4 ビットを使う。
D3DFMT_R3G3B2 27 8 ビットの RGB テクスチャ フォーマットで、赤に 3 ビット、緑に 3 ビット、青に 2 ビットを使う。
D3DFMT_A8 28 8 ビットのアルファのみ。
D3DFMT_A8R3G3B2 29 16 ビットの ARGB テクスチャ フォーマットで、アルファに 8 ビット、赤と緑にそれぞれ 3 ビット、青に 2 ビットを使う。
D3DFMT_X4R4G4B4 30 16 ビットの RGB ピクセル フォーマットで、色ごとに 4 ビットを使う。
D3DFMT_A2B10G10R10 31 32 ビットのピクセル フォーマットで、各色に 10 ビット、アルファに 2 ビットを使う。
D3DFMT_A8B8G8R8 32 32 ビットのアルファ付き ARGB ピクセル フォーマットで、チャンネルあたり 8 ビットを使う。
D3DFMT_X8B8G8R8 33 32 ビットの RGB ピクセル フォーマットで、各色に 8 ビットが確保されている。
D3DFMT_G16R16 34 32 ビットのピクセル フォーマットで、緑と赤にそれぞれ 16 ビットを使う。
D3DFMT_A2R10G10B10 35 32 ビットのピクセル フォーマットで、赤・緑・青にそれぞれ 10 ビット、アルファに 2 ビットを使う。
D3DFMT_A16B16G16R16 36 64 ビットのピクセル フォーマットで、成分ごとに 16 ビットを使う。
D3DFMT_A8P8 40 8 ビットのアルファが付いた 8 ビットのカラー インデックス データ。
D3DFMT_P8 41 8 ビットのカラー インデックス データ。
D3DFMT_L8 50 8 ビットの輝度のみ。
D3DFMT_L16 81 16 ビットの輝度のみ。
D3DFMT_A8L8 51 16 ビットで、アルファと輝度にそれぞれ 8 ビットを使う。
D3DFMT_A4L4 52 8 ビットで、アルファと輝度にそれぞれ 4 ビットを使う。

符号付きフォーマット

符号付きフォーマットのデータは、正であっても負であってもよい。符号付きフォーマットでは、(U)、(V)、(W)、(Q) データを組み合わせて使う。

符号付きフォーマットのフラグ フォーマット
D3DFMT_V8U8 60 16 ビットのバンプ マップ フォーマットで、u データと v データにそれぞれ 8 ビットを使う。
D3DFMT_Q8W8V8U8 63 32 ビットのバンプ マップ フォーマットで、チャンネルごとに 8 ビットを使う。
D3DFMT_V16U16 64 32 ビットのバンプ マップ フォーマットで、チャンネルごとに 16 ビットを使う。
D3DFMT_Q16W16V16U16 110 64 ビットのバンプ マップ フォーマットで、成分ごとに 16 ビットを使う。
D3DFMT_CxV8U8 117 16 ビットの通常圧縮フォーマット。テクスチャ サンプラは次のように C チャンネルを計算する。C = sqrt(1 - U2 - V2)

ミックス フォーマット

ミックス フォーマットには、符号なしデータと符号付きデータを組み合わせて格納できる。

ミックス フォーマットのフラグ フォーマット
D3DFMT_L6V5U5 61 輝度付きの 16 ビット バンプ マップ フォーマットで、輝度に 6 ビット、v と u にそれぞれ 5 ビットを使う。
D3DFMT_X8L8V8U8 62 輝度付きの 32 ビット バンプ マップ フォーマットで、チャンネルごとに 8 ビットを使う。
D3DFMT_A2W10V10U10 67 32 ビットのバンプ マップ フォーマットで、アルファに 2 ビット、w、v、u にそれぞれ 10 ビットを使う。

FOURCC フォーマット

4 文字コード (FOURCC) フォーマットのデータは、圧縮データである。

MAKEFOURCC

4 文字コードを生成するマクロを次に示す。

#define MAKEFOURCC(ch0, ch1, ch2, ch3)                              \
                ((DWORD)(BYTE)(ch0) | ((DWORD)(BYTE)(ch1) << 8) |   \
                ((DWORD)(BYTE)(ch2) << 16) | ((DWORD)(BYTE)(ch3) << 24 ))

定義済みの FOURCC フォーマットを次に示す。

FOURCC フラグ フォーマット
D3DFMT_MULTI2_ARGB8 MAKEFOURCC('M','E','T','1') MultiElement テクスチャ (圧縮なし)
D3DFMT_G8R8_G8B8 MAKEFOURCC('G', 'R', 'G', 'B') YUY2 (Y0U0, Y1V0, Y2U2 など) に類似した 16 ビットにパックされた RGB フォーマット。色値を正しく表すために、ピクセルのペアを必要とする。ペアの 1 つ目のピクセルは、緑の 8 ビット (上位 8 ビット) と赤の 8 ビット (下位 8 ビット) を含む。2 つ目のピクセルは、緑の 8 ビット (上位 8 ビット) と青の 8 ビット (下位 8 ビット) を含む。2 つのピクセルは、一緒に赤と青の成分を共有しているが、同時にそれぞれが固有の緑成分 (G0R0、G1B0、G2R2 など) を持つ。テクスチャ サンプラは、ピクセル シェーダ内を参照するときに色を正規化しない。色は 0.0f ~ 255.0f の範囲のままになる。これはすべてのプログラマブル ピクセル シェーダ モデルに当てはまる。固定機能ピクセル シェーダに場合は、ハードウェアで 0.f ~ 1.f の範囲に正規化する必要があり、本質的に YUY2 テクスチャとして処理する必要がある。このフォーマットを公開するハードウェアは、D3DCAPS9 の PixelShader1xMaxValue メンバが、その範囲を処理できる値に設定されていなければならない。
D3DFMT_R8G8_B8G8 MAKEFOURCC('R', 'G', 'B', 'G') UYVY (U0Y0、V0Y1、U2Y2 など) に類似した 16 ビットにパックされた RGB フォーマット。色値を正しく表すために、ピクセルのペアを必要とする。ペアの 1 つ目のピクセルは、緑の 8 ビット (下位 8 ビット) と赤の 8 ビット (上位 8 ビット) を含む。2 つ目のピクセルは、緑の 8 ビット (下位 8 ビット) と青の 8 ビット (上位 8 ビット) を含む。2 つのピクセルは、一緒に赤と青の成分を共有しているが、同時にそれぞれが固有の緑成分 (R0G0、B0G1、R2G2 など) を持つ。テクスチャ サンプラは、ピクセル シェーダ内を参照するときに色を正規化しない。色は 0.0f ~ 255.0f の範囲のままになる。これはすべてのプログラマブル ピクセル シェーダ モデルに当てはまる。固定機能ピクセル シェーダに場合は、ハードウェアで 0.f ~ 1.f の範囲に正規化する必要があり、本質的に YUY2 テクスチャとして処理する必要がある。このフォーマットを公開するハードウェアは、D3DCAPS9 の PixelShader1xMaxValue メンバが、その範囲を処理できる値に設定されていなければならない。
D3DFMT_DXT1 MAKEFOURCC('D', 'X', 'T', '1') DXT1 圧縮テクスチャ フォーマット
D3DFMT_DXT2 MAKEFOURCC('D', 'X', 'T', '2') DXT2 圧縮テクスチャ フォーマット
D3DFMT_DXT3 MAKEFOURCC('D', 'X', 'T', '3') DXT3 圧縮テクスチャ フォーマット
D3DFMT_DXT4 MAKEFOURCC('D', 'X', 'T', '4') DXT4 圧縮テクスチャ フォーマット
D3DFMT_DXT5 MAKEFOURCC('D', 'X', 'T', '5') DXT5 圧縮テクスチャ フォーマット
D3DFMT_UYVY MAKEFOURCC('U', 'Y', 'V', 'Y') UYVY フォーマット (PC98 準拠)
D3DFMT_YUY2 MAKEFOURCC('Y', 'U', 'Y', '2') YUY2 フォーマット (PC98 準拠)

バッファ フォーマット

深度バッファ、ステンシル バッファ、頂点バッファ、インデックス バッファは、それぞれ固有のフォーマットを持つ。

バッファ フラグ フォーマット
D3DFMT_D16_LOCKABLE 70 16 ビットの Z バッファ ビット深度。
D3DFMT_D32 71 32 ビットの Z バッファ ビット深度。
D3DFMT_D15S1 73 16 ビットの Z バッファ ビット深度で、15 ビットが深度チャンネルに、1 ビットがステンシル チャンネルに確保されている。
D3DFMT_D24S8 75 32 ビットの Z バッファ ビット深度で、深度チャンネルに 24 ビット、ステンシル チャンネルに 8 ビットを使う。
D3DFMT_D24X8 77 32 ビットの Z バッファ ビット深度で、深度チャンネルに 24 ビットを使う。
D3DFMT_D24X4S4 79 32 ビットの Z バッファ ビット深度で、深度チャンネルに 24 ビット、ステンシル チャンネルに 4 ビットを使う。
D3DFMT_D32F_LOCKABLE 82 深度値を標準 IEEE 浮動小数点数値として表すロック可能なフォーマット。
D3DFMT_D24FS8 83 24 ビットの深度 (24 ビット浮動小数点フォーマット - 20e4) と 8 ビットのステンシルを含む、ロックできないフォーマット。
D3DFMT_D16 80 16 ビットの Z バッファ ビット深度。
D3DFMT_VERTEXDATA 100 頂点バッファ サーフェイスを記述する。
D3DFMT_INDEX16 101 16 ビットのインデックス バッファのビット深度。
D3DFMT_INDEX32 102 32 ビットのインデックス バッファのビット深度。

D3DFMT_D16_LOCKABLE を除くすべての深度ステンシル フォーマットは、各ピクセルに特定のビット オーダーを指定しないので、ドライバは深度チャンネルとして指定されたビット数より広いチャンネルを使える (ただし、ステンシル チャンネルは使えない)。

浮動小数点フォーマット

これらのフラグは、浮動小数点のサーフェイス フォーマットに使う。チャンネルあたり 16 ビットを使うこれらのフォーマットは、s10e5 フォーマットとも呼ばれる。

浮動小数点のフラグ フォーマット
D3DFMT_R16F 111 16 ビットの浮動小数点フォーマットで、赤のチャンネルに 16 ビットを使う。
D3DFMT_G16R16F 112 32 ビットの浮動小数点フォーマットで、赤のチャンネルに 16 ビット、緑のチャンネルに 16 ビットを使う。
D3DFMT_A16B16G16R16F 113 64 ビットの浮動小数点フォーマットで、アルファ・青・緑・赤のチャンネルごとに 16 ビットを使う。

IEEE フォーマット

これらのフラグは、浮動小数点のサーフェイス フォーマットに使う。チャンネルあたり 32 ビットを使うこれらのフォーマットは、s23e8 フォーマットとも呼ばれる。

浮動小数点のフラグ フォーマット
D3DFMT_R32F 114 32 ビットの浮動小数点フォーマットで、赤のチャンネルに 32 ビットを使う。
D3DFMT_G32R32F 115 64 ビットの浮動小数点フォーマットで、赤のチャンネルに 32 ビット、緑のチャンネルに 32 ビットを使う。
D3DFMT_A32B32G32R32F 116 128 ビットの浮動小数点フォーマットで、アルファ・青・緑・赤のチャンネルごとに 32 ビットを使う。

その他

その他のフラグは、これのみであり、未定義のフォーマットに使う。

その他のフラグ フォーマット
D3DFMT_UNKNOWN 0 サーフェイス フォーマットは不明である。

バック バッファまたはディスプレイ フォーマット

これらのフォーマットは、バック バッファまたはディスプレイに対してのみ有効である。

フォーマット バック バッファ。 ディスプレイ
A2R10G10B10 x x (フルスクリーン モードのみ)
A8R8G8B8 x
X8R8G8B8 x x
A1R5G5B5 x
X1R5G5B5 x x
R5G6B5 x x

注意

ビット オーダーは、最上位バイトが先頭である。したがって、D3DFMT_A8L8 は、この 2 バイト フォーマットの上位バイトがアルファであることを示している。D3DFMT_D16 は、16 ビットの整数値で、アプリケーションでロック可能なサーフェイスを示す。

ピクセル フォーマットが選択されているのは、確立されている FOURCC 方式を取り入れるだけでなく、ハードウェア ベンダーが定義する拡張フォーマットの表現を可能にするためである。Microsoft® Direct3D® ランタイムが認識するフォーマット群は、D3DFORMAT で定義されている。

独立したハードウェア ベンダ (IHV) が提供するフォーマットおよび多くの FOURCC コードは、一覧には示されていないので注意する必要がある。この列挙型のフォーマットは、ランタイムによって認められている点が他のフォーマットと異なる。つまり、リファレンス ラスタライザは、これらの型のすべてで動作する。IHV 提供のフォーマットは、カードごとに個々の IHV がサポートする。

関連項目