D3DFORMAT

定義各種介面格式類型。

typedef enum _D3DFORMAT {
    D3DFMT_UNKNOWN              =  0,

    D3DFMT_R8G8B8               = 20,
    D3DFMT_A8R8G8B8             = 21,
    D3DFMT_X8R8G8B8             = 22,
    D3DFMT_R5G6B5               = 23,
    D3DFMT_X1R5G5B5             = 24,
    D3DFMT_A1R5G5B5             = 25,
    D3DFMT_A4R4G4B4             = 26,
    D3DFMT_R3G3B2               = 27,
    D3DFMT_A8                   = 28,
    D3DFMT_A8R3G3B2             = 29,
    D3DFMT_X4R4G4B4             = 30,
    D3DFMT_A2B10G10R10          = 31,
    D3DFMT_A8B8G8R8             = 32,
    D3DFMT_X8B8G8R8             = 33,
    D3DFMT_G16R16               = 34,
    D3DFMT_A2R10G10B10          = 35,
    D3DFMT_A16B16G16R16         = 36,

    D3DFMT_A8P8                 = 40,
    D3DFMT_P8                   = 41,

    D3DFMT_L8                   = 50,
    D3DFMT_A8L8                 = 51,
    D3DFMT_A4L4                 = 52,

    D3DFMT_V8U8                 = 60,
    D3DFMT_L6V5U5               = 61,
    D3DFMT_X8L8V8U8             = 62,
    D3DFMT_Q8W8V8U8             = 63,
    D3DFMT_V16U16               = 64,
    D3DFMT_A2W10V10U10          = 67,

    D3DFMT_UYVY                 = MAKEFOURCC('U', 'Y', 'V', 'Y'),
    D3DFMT_R8G8_B8G8            = MAKEFOURCC('R', 'G', 'B', 'G'),
    D3DFMT_YUY2                 = MAKEFOURCC('Y', 'U', 'Y', '2'),
    D3DFMT_G8R8_G8B8            = MAKEFOURCC('G', 'R', 'G', 'B'),
    D3DFMT_DXT1                 = MAKEFOURCC('D', 'X', 'T', '1'),
    D3DFMT_DXT2                 = MAKEFOURCC('D', 'X', 'T', '2'),
    D3DFMT_DXT3                 = MAKEFOURCC('D', 'X', 'T', '3'),
    D3DFMT_DXT4                 = MAKEFOURCC('D', 'X', 'T', '4'),
    D3DFMT_DXT5                 = MAKEFOURCC('D', 'X', 'T', '5'),

    D3DFMT_D16_LOCKABLE         = 70,
    D3DFMT_D32                  = 71,
    D3DFMT_D15S1                = 73,
    D3DFMT_D24S8                = 75,
    D3DFMT_D24X8                = 77,
    D3DFMT_D24X4S4              = 79,
    D3DFMT_D16                  = 80,

    D3DFMT_D32F_LOCKABLE        = 82,
    D3DFMT_D24FS8               = 83,

#if !defined(D3D_DISABLE_9EX)
    D3DFMT_D32_LOCKABLE         = 84,
    D3DFMT_S8_LOCKABLE          = 85,
#endif // !D3D_DISABLE_9EX

    D3DFMT_L16                  = 81,

    D3DFMT_VERTEXDATA           =100,
    D3DFMT_INDEX16              =101,
    D3DFMT_INDEX32              =102,

    D3DFMT_Q16W16V16U16         =110,

    D3DFMT_MULTI2_ARGB8         = MAKEFOURCC('M','E','T','1'),

    D3DFMT_R16F                 = 111,
    D3DFMT_G16R16F              = 112,
    D3DFMT_A16B16G16R16F        = 113,

    D3DFMT_R32F                 = 114,
    D3DFMT_G32R32F              = 115,
    D3DFMT_A32B32G32R32F        = 116,

    D3DFMT_CxV8U8               = 117,

#if !defined(D3D_DISABLE_9EX)
    D3DFMT_A1                   = 118,
    D3DFMT_A2B10G10R10_XR_BIAS  = 119,
    D3DFMT_BINARYBUFFER         = 199,
#endif // !D3D_DISABLE_9EX

    D3DFMT_FORCE_DWORD          =0x7fffffff
} D3DFORMAT;

備註

有數種類型的格式:

所有格式都會從左至右列出,最顯著位到最小有效位。 例如, D3DFORMAT_ARGB 會從最重要的位通道 A (Alpha) 排序到最小有效位通道 B (藍色) 。 周遊表面資料時,資料會儲存在記憶體中,從最小有效位到最顯著位,這表示記憶體中的通道順序是從最小有效位 (藍色) 到最顯著位 (Alpha) 。

包含未定義通道的格式預設值, (G16R16、A8 等等) 為 1。 唯一的例外是 A8 格式,此格式會針對三個色彩色板初始化為 000。

位的順序會先來自最重要的位元組,因此D3DFMT_A8L8表示這個 2 位元組格式的高位元組是 Alpha。 D3DFMT_D16 表示 16 位整數值和可鎖定的應用程式介面。

已選擇像素格式來啟用硬體廠商定義延伸模組格式的運算式,以及包含妥善建立的 FOURCC 方法。 Direct3D 執行時間所瞭解的格式集是由 D3DFORMAT 所定義。

請注意,獨立硬體廠商提供的格式 (IHV) ,而且未列出許多 FOURCC 程式碼。 此列舉中的格式是執行時間所批准的唯一格式,這表示參考點陣化程式會在所有這些類型上運作。 個別 IHV 會根據卡片來支援 IHV 提供的格式。

BackBuffer 或顯示格式

這些格式是背景緩衝區或顯示器的唯一有效格式。

格式 上一頁緩衝區 顯示
A2R10G10B10 x 僅) x (全螢幕模式
A8R8G8B8 x
X8R8G8B8 x x
A1R5G5B5 x
X1R5G5B5 x x
R5G6B5 x x

 

緩衝區格式

深度、樣板、頂點和索引緩衝區各有唯一的格式。

緩衝區旗標 格式
D3DFMT_D16_LOCKABLE 70 16 位 z 緩衝區位深度。
D3DFMT_D32 71 32 位 z 緩衝區位深度。
D3DFMT_D15S1 73 16 位 z 緩衝區位深度,其中 15 位會保留給深度通道,而 1 位則保留給樣板通道。
D3DFMT_D24S8 75 深度通道使用 24 位的 32 位 z 緩衝區位深度,樣板通道則使用 8 位。
D3DFMT_D24X8 77 針對深度通道使用 24 位的 32 位 z 緩衝區位深度。
D3DFMT_D24X4S4 79 深度通道使用 24 位的 32 位 z 緩衝區位深度,樣板通道則使用 4 位。
D3DFMT_D32F_LOCKABLE 82 可鎖定的格式,其中深度值會以標準 IEEE 浮點數表示。
D3DFMT_D24FS8 83 不可鎖定的格式,包含 24 位浮點格式的 24 位深度 (- 20e4) 和 8 位樣板。
D3DFMT_D32_LOCKABLE 84 可鎖定的 32 位深度緩衝區。 Direct3D 9 與 Direct3D 9Ex 之間的差異: 此旗標僅適用于 Direct3D 9Ex。
D3DFMT_S8_LOCKABLE 85 可鎖定的 8 位樣板緩衝區。 Direct3D 9 與 Direct3D 9Ex 之間的差異: 此旗標僅適用于 Direct3D 9Ex。
D3DFMT_D16 80 16 位 z 緩衝區位深度。
D3DFMT_VERTEXDATA 100 描述頂點緩衝區介面。
D3DFMT_INDEX16 101 16 位索引緩衝區位深度。
D3DFMT_INDEX32 102 32 位索引緩衝區位深度。

 

除了D3DFMT_D16_LOCKABLE以外的所有深度樣板格式都表示每個圖元沒有特定的位順序,而且驅動程式可以取用超過每個深度通道 (指定的位數,但不允許樣板通道) 。

DXTn 壓縮紋理格式

這些旗標用於壓縮紋理:

DXTn 壓縮紋理旗標 格式
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 壓縮紋理格式

 

除非表面尺寸是 4 的倍數,否則執行時間不允許應用程式使用 DXTn 格式建立表面。 這適用于螢幕外平面、轉譯目標、2D 紋理、立方體紋理和磁片區紋理。

Floating-Point格式

這些旗標用於浮點表面格式。 每個通道的 16 位格式也稱為 s10e5 格式。

浮點旗標 格式
D3DFMT_R16F 111 針對紅色通道使用 16 位的 16 位浮點數格式。
D3DFMT_G16R16F 112 紅色通道使用 16 位的 32 位 float 格式,而綠色通道則使用 16 位。
D3DFMT_A16B16G16R16F 113 每個通道使用 16 位的 64 位 float 格式, (Alpha、藍色、綠色、紅色) 。

 

FOURCC 格式

FOURCC 格式的資料是壓縮的資料。

MAKEFOURCC

產生四個字元代碼的宏如下:

#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') 16 位封裝的 RGB 格式類似于 YUY2 (Y0U0、Y1V0、Y2U2 等等) 。 它需要圖元組才能正確表示色彩值。 配對中的第一個圖元在高 8 位) 中包含 8 位綠色 (,而低 8 位) 則包含 8 位紅色 (。 第二個圖元在高 8 位) 中包含 8 位綠色 (,而低 8 位) 則包含 8 位藍色 (。 兩個圖元會共用紅色和藍色元件,而每個元件都有唯一的綠色元件 (G0R0、G1B0、G2R2 等等) 。 在查閱圖元著色器時,紋理取樣器不會將色彩正規化;它們會保留在 0.0f 到 255.0f 的範圍內。 這適用于所有可程式化圖元著色器模型。 針對固定函式圖元著色器,硬體應該標準化為 0.f 到 1.f 範圍,基本上會將它視為 YUY2 紋理。 公開此格式的硬體必須將 D3DCAPS9 的 PixelShader1xMaxValue 成員設定為能夠處理該範圍的值。
D3DFMT_R8G8_B8G8 MAKEFOURCC ('R'、'G'、'B'、'G') 16 位封裝的 RGB 格式類似于 UYVY (U0Y0、V0Y1、U2Y2 等) 。 它需要圖元組才能正確表示色彩值。 配對中的第一個圖元在低 8 位) 中包含 8 位綠色 (,而高 8 位) 則包含 8 位紅色 (。 第二個圖元在低 8 位) 中包含 8 位綠色 (,而高 8 位) 則包含 8 位藍色 (。 兩個圖元會共用紅色和藍色元件,而每個元件都有唯一的綠色元件 (R0G0、B0G1、R2G2 等等) 。 在查閱圖元著色器時,紋理取樣器不會將色彩正規化;它們會保留在 0.0f 到 255.0f 的範圍內。 這適用于所有可程式化圖元著色器模型。 針對固定函式圖元著色器,硬體應該標準化為 0.f 到 1.f 範圍,基本上會將它視為 YUY2 紋理。 公開此格式的硬體必須將 D3DCAPS9 的 PixelShader1xMaxValue 成員設定為能夠處理該範圍的值。
D3DFMT_UYVY MAKEFOURCC ('U'、'Y'、'V'、'Y') UYVY 格式 (PC98 合規性)
D3DFMT_YUY2 MAKEFOURCC ('Y'、'U'、'Y'、'2') YUY2 格式 (PC98 合規性)

 

IEEE 格式

這些旗標用於浮點表面格式。 這些每個通道的 32 位格式也稱為 s23e8 格式。

浮點旗標 格式
D3DFMT_R32F 114 針對紅色通道使用 32 位的 32 位浮點數格式。
D3DFMT_G32R32F 115 紅色通道使用 32 位的 64 位浮點數格式,而綠色通道則使用 32 位。
D3DFMT_A32B32G32R32F 116 每個通道使用 32 位的 128 位 float 格式, (Alpha、藍色、綠色、紅色) 。

 

混合格式

混合格式的資料可以包含未簽署資料和已簽署資料的組合。

混合格式旗標 格式
D3DFMT_L6V5U5 61 16 位的凸起對應格式,使用 6 位的亮度來表示亮度,而 v 和您各使用 5 位。
D3DFMT_X8L8V8U8 62 針對每個通道使用 8 位的 32 位凸凸對應格式。
D3DFMT_A2W10V10U10 67 32 位的凸凸對應格式,針對 w、v 和您,分別使用 2 位的 Alpha 和 10 位。

 

帶正負號的格式

帶正負號格式的資料可以是正數和負數。 帶正負號的格式會使用 (U) 、 (V) 、 (W) 和 (Q) 資料的組合。

帶正負號的格式旗標 格式
D3DFMT_V8U8 60 16 位的凸凸對應格式,每一個都使用 8 位給您和 v 資料。
D3DFMT_Q8W8V8U8 63 每個通道使用 8 位的 32 位凸凸對應格式。
D3DFMT_V16U16 64 每個通道使用 16 位的 32 位凸凸對應格式。
D3DFMT_Q16W16V16U16 110 每個元件使用 16 位的 64 位凸凸對應格式。
D3DFMT_CxV8U8 117 16 位標準壓縮格式。 紋理取樣器會計算 C 通道的來源:C = sqrt (1 - Uー - Vー) 。

 

不帶正負號的格式

不帶正負號格式的資料必須是正數。 不帶正負號的格式會使用 (R) ed、 (G) 、 (B) lue、 (A) lpha、 (L) 支配和 (P) alette 資料的組合。 調色盤資料也稱為色彩索引資料,因為資料是用來為調色盤編制索引。

不帶正負號的格式旗標 格式
D3DFMT_R8G8B8 20 每個通道 8 位的 24 位 RGB 像素格式。
D3DFMT_A8R8G8B8 21 32 位 ARGB 像素格式搭配 Alpha,每個通道使用 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 位則保留給 Alpha。
D3DFMT_A4R4G4B4 26 每個通道有 4 位的 16 位 ARGB 像素格式。
D3DFMT_R3G3B2 27 8 位 RGB 紋理格式,使用 3 位表示紅色、3 位代表綠色,2 位代表藍色。
D3DFMT_A8 28 僅限 8 位 Alpha。
D3DFMT_A8R3G3B2 29 16 位 ARGB 紋理格式使用 8 位的 Alpha、3 位分別用於紅色和綠色,2 位表示藍色。
D3DFMT_X4R4G4B4 30 每個色彩使用 4 位的 16 位 RGB 像素格式。
D3DFMT_A2B10G10R10 31 每個色彩使用 10 位的 32 位像素格式,Alpha 則使用 2 位。
D3DFMT_A8B8G8R8 32 32 位 ARGB 像素格式搭配 Alpha,每個通道使用 8 位。
D3DFMT_X8B8G8R8 33 32 位 RGB 像素格式,其中 8 位會保留給每個色彩。
D3DFMT_G16R16 34 使用 16 位的 32 位像素格式,分別用於綠色和紅色。
D3DFMT_A2R10G10B10 35 32 位像素格式使用 10 位,分別用於紅色、綠色和藍色,而 Alpha 則使用 2 位。
D3DFMT_A16B16G16R16 36 每個元件使用 16 位的 64 位像素格式。
D3DFMT_A8P8 40 以 8 位 Alpha 為索引的 8 位色彩。
D3DFMT_P8 41 已編制索引的 8 位色彩。
D3DFMT_L8 50 僅限 8 位亮度。
D3DFMT_L16 81 僅限 16 位亮度。
D3DFMT_A8L8 51 16 位使用 8 位,分別用於 Alpha 和亮度。
D3DFMT_A4L4 52 針對 Alpha 和亮度,各使用 4 位的 8 位。
D3DFMT_A1 118 1 位單色。 Direct3D 9 與 Direct3D 9Ex 之間的差異: 此旗標僅適用于 Direct3D 9Ex。
D3DFMT_A2B10G10R10_XR_BIAS 119 2.8 偏差固定點。 Direct3D 9 與 Direct3D 9Ex 之間的差異: 此旗標僅適用于 Direct3D 9Ex。
D3DFMT_BINARYBUFFER 199 二進位格式,表示資料沒有固有類型。 Direct3D 9 與 Direct3D 9Ex 之間的差異: 此旗標僅適用于 Direct3D 9Ex。

 

其他

這個旗標用於未定義的格式。

其他旗標 格式
D3DFMT_UNKNOWN 0 Surface 格式不明

 

規格需求

需求
標頭
D3D9Types.h

另請參閱

Direct3D 列舉