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 がサポートする。