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 32 位 z 缓冲区位深度,深度通道使用 24 位,模具通道使用 8 位。
D3DFMT_D24X8 77 使用 24 位作为深度通道的 32 位 z 缓冲区位深度。
D3DFMT_D24X4S4 79 32 位 z 缓冲区位深度,深度通道使用 24 位,模具通道使用 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 32 位浮点格式,红色通道使用 16 位,绿色通道使用 16 位。
D3DFMT_A16B16G16R16F 113 对于每个通道使用 16 位的 64 位浮点格式, (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') 类似于 YUY2 (Y0U0、Y1V0、Y2U2 等) 的 16 位打包 RGB 格式。 它需要像素对才能正确表示颜色值。 对中的第一个像素在高 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') 类似于 UYVY (U0Y0、V0Y1、U2Y2 等) 的 16 位打包 RGB 格式。 它需要像素对才能正确表示颜色值。 对中的第一个像素在低 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 64 位浮点格式,红色通道使用 32 位,绿色通道使用 32 位。
D3DFMT_A32B32G32R32F 116 每个通道使用 32 位的 128 位浮点格式, (alpha、蓝色、绿色、红色) 。

 

混合格式

混合格式的数据可以包含无符号数据和有符号数据的组合。

混合格式标志 格式
D3DFMT_L6V5U5 61 16 位凹凸贴图格式,亮度使用 6 位表示亮度,v 和你各使用 5 位。
D3DFMT_X8L8V8U8 62 具有亮度的 32 位凹凸映射格式,每个通道使用 8 位。
D3DFMT_A2W10V10U10 67 32 位凹凸映射格式,使用 2 位 alpha 和 10 位(对于 w、v 和 you)。

 

已签名格式

带符号格式的数据可以是正数和负数。 带符号格式使用 (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) reen、 (B) lue、 (A) lpha、 (L) 优势和 (P) alette 数据的组合。 调色板数据也称为颜色索引数据,因为该数据用于为调色板编制索引。

无符号格式标志 格式
D3DFMT_R8G8B8 20 24 位 RGB 像素格式,每个通道 8 位。
D3DFMT_A8R8G8B8 21 具有 alpha 的 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 位,为 alpha 保留 1 位。
D3DFMT_A4R4G4B4 26 16 位 ARGB 像素格式,每个通道 4 位。
D3DFMT_R3G3B2 27 8 位 RGB 纹理格式,红色为 3 位,绿色为 3 位,蓝色为 2 位。
D3DFMT_A8 28 仅限 8 位 alpha。
D3DFMT_A8R3G3B2 29 16 位 ARGB 纹理格式,alpha 使用 8 位,红色和绿色各 3 位,蓝色各 2 位。
D3DFMT_X4R4G4B4 30 16 位 RGB 像素格式,每种颜色使用 4 位。
D3DFMT_A2B10G10R10 31 32 位像素格式,每种颜色使用 10 位,alpha 使用 2 位。
D3DFMT_A8B8G8R8 32 具有 alpha 的 32 位 ARGB 像素格式,每个通道使用 8 位。
D3DFMT_X8B8G8R8 33 32 位 RGB 像素格式,其中为每个颜色保留 8 位。
D3DFMT_G16R16 34 32 位像素格式,绿色和红色各使用 16 位。
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 8 位,使用 4 位分别用于 alpha 和亮度。
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 枚举