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 格式未知 |
要求
要求 | 值 |
---|---|
标头 |
|
另请参阅