DDPIXELFORMAT 结构 (ksmedia.h)
DDPIXELFORMAT 结构描述 DirectDrawSurface 对象的像素格式。
语法
typedef struct _DDPIXELFORMAT {
DWORD dwSize;
DWORD dwFlags;
DWORD dwFourCC;
union {
DWORD dwRGBBitCount;
DWORD dwYUVBitCount;
DWORD dwZBufferBitDepth;
DWORD dwAlphaBitDepth;
};
union {
DWORD dwRBitMask;
DWORD dwYBitMask;
};
union {
DWORD dwGBitMask;
DWORD dwUBitMask;
};
union {
DWORD dwBBitMask;
DWORD dwVBitMask;
};
union {
DWORD dwRGBAlphaBitMask;
DWORD dwYUVAlphaBitMask;
DWORD dwRGBZBitMask;
DWORD dwYUVZBitMask;
};
} DDPIXELFORMAT, *LPDDPIXELFORMAT;
成员
dwSize
指定 DDPIXELFORMAT 结构的大小(以字节为单位)。 在使用结构之前,驱动程序必须初始化此成员。
仅限 DirectX 9.0 及更高版本。 在输入时指定应用程序使用的 Microsoft DirectX 运行时的版本。 此成员设置为 DD_RUNTIME_VERSION,这是 DirectX 9.0 的0x00000900,D3DGDI2_TYPE_GETFORMAT查询的 DD_GETFORMATDATA 结构的格式成员。
dwFlags
指示一组指定可选控件标志的标志。 此成员是以下任何值的按位 OR:
标志 | 含义 |
---|---|
DDPF_ALPHA | 像素格式描述仅限 alpha 的图面。 |
DDPF_ALPHAPIXELS | 图面具有像素格式的 alpha 通道信息。 |
DDPF_ALPHAPREMULT | 像素中的颜色分量被像素中的 alpha 值预乘。 如果设置了此标志,则还必须设置DDPF_ALPHAPIXELS标志。 如果未设置此标志,但设置了DDPF_ALPHAPIXELS标志,则像素格式的颜色分量不会被 alpha 预乘。 在这种情况下,颜色分量必须在执行 alpha 混合操作时乘以 alpha 值。 |
DDPF_BUMPDUDV | 像素格式的凹凸贴图 dUdV 数据有效。 |
DDPF_BUMPHEIGHT | 像素格式的凹凸图高度数据有效。 |
DDPF_COMPRESSED | 图面接受指定格式的像素数据,并在写入操作期间对其进行压缩。 |
DDPF_D3DFORMAT | 指示纹理格式列表中的 DirectX 8.0 及更高版本格式功能条目。 此标志不向应用程序公开。 |
DDPF_FOURCC | FOURCC 代码有效。 |
DDPF_LUMINANCE | 像素格式的亮度数据有效。 将此标志用于仅亮度或 luminance-plus-alpha 表面;然后在 dwLuminanceBitCount 成员中指定位深度。 |
DDPF_LUMINANCEPIXELS | 像素格式的亮度数据有效。 当将亮度挂起时使用此标志,例如,凹凸贴图表面。 然后在 dwBumpLuminanceBitMask 成员中指定像素亮度部分的位掩码。 |
DDPF_NOVEL_TEXTURE_FORMAT | 指示运行时可能不会向所有应用程序公开的新图面格式。 |
DDPF_PALETTEINDEXED1 | 图面已编制 1 位颜色索引。 |
DDPF_PALETTEINDEXED2 | 图面已编制 2 位颜色索引。 |
DDPF_PALETTEINDEXED4 | 图面已编制 4 位颜色索引。 |
DDPF_PALETTEINDEXED8 | 图面已编制 8 位颜色索引。 |
DDPF_PALETTEINDEXEDTO8 | 表面是 1 位、2 位或 4 位颜色,索引到 8 位调色板。 |
DDPF_RGB | 像素格式结构中的 RGB 数据有效。 |
DDPF_RGBTOYUV | 图面接受 RGB 数据,并在写入操作期间将其转换为 YUV 数据。 要写入的数据的格式包含在像素格式结构中。 设置DDPF_RGB标志。 |
DDPF_STENCILBUFFER | 图面在 z 缓冲区的每个像素中对模具和深度信息进行编码。 |
DDPF_YUV | 像素格式结构中的 YUV 数据有效。 |
DDPF_ZBUFFER | 像素格式描述仅限 z 缓冲区的图面。 |
DDPF_ZPIXELS | 图面采用 RGBZ 格式。 |
dwFourCC
指定表面格式代码,包括D3DFORMAT枚举类型中的任何代码。 某些 FOURCC 代码是D3DFORMAT的一部分。 有关D3DFORMAT的详细信息,请参阅 SDK 文档。 硬件供应商还可以定义并提供特定于其硬件的格式代码。
dwRGBBitCount
指定每个像素的 RGB 位数 (4、8、16、24 或 32) 。
dwYUVBitCount
指定每个像素的 YUV 位数。
dwZBufferBitDepth
指定 Z 缓冲区位深度 (8 位、16 位、24 位或 32 位) 。
dwAlphaBitDepth
指定 Alpha 通道位深度。
dwRBitMask
指定红色位的掩码。
dwYBitMask
指定 Y 位的掩码。
dwGBitMask
指定绿色位的掩码。
dwUBitMask
指定 U 位的掩码。
dwBBitMask
指定蓝色位的掩码。
dwVBitMask
指定 V 位的掩码。
dwRGBAlphaBitMask
alpha 通道的掩码。
dwYUVAlphaBitMask
alpha 通道的掩码。
dwRGBZBitMask
Z 通道的掩码。
dwYUVZBitMask
Z 通道的掩码。
注解
DirectX 8.0 及更高版本的运行时对操作 (操作) 列表施加以下规则:
对于任何 DS 格式,只允许一个 endian-ness (大或小) ,例如 D15S1 或 S1D15,不能同时独立于其他位。
列表应仅包含一个 16bpp 格式的D3DFORMAT_OP_DISPLAYMODE (例如,它不应枚举 5:5:5 和 5:6:5) 。
列表不应包含任何设置了D3DFORMAT_OP_DISPLAYMODE或D3DFORMAT_OP_3DACCELLERATION的 alpha 格式。
仅当同时设置D3DFORMAT_OP_DISPLAYMODE标志时,才能设置D3DFORMAT_OP_3DACCELLERATION标志。
如果驱动程序支持可锁定的 D16,则应在操作列表中报告D3DFMT_D16_LOCKABLE;否则,它应报告D3DFMT_D16。
支持多重采样的驱动程序必须以可支持多重采样的深度/模具格式填充 MultiSampleCaps 。 这使运行时能够检测驱动程序是否支持呈现目标和 Z 缓冲区格式组合的多重采样。 有关与拉伸 blt 多重采样相关的限制的其他信息,请参阅 SDK 文档中D3DCAPS8结构中包含的光栅帽D3DPRASTERCAPS_STRETCHBLTMULTISAMPLE上限的说明。
设置 wFlipMSTypes 和 wBltMSTypes 中的位时,将使用 d3d8types.h 中定义的枚举类型D3DMULTISAMPLE_TYPE。 若要指定对每个像素特定样本数的支持,只需按逻辑方式将 1 从D3DMULTISAMPLE_TYPE枚举类型减为 1,或者将其移动到 wFlipMSTypes 和 wBltMSTypes) (相应字段。
例如,如果驱动程序在翻转 (全屏模式) 时支持每个像素两个和四个样本,在X8R8G8B8图面上翻转 (窗口模式) 时,每个像素支持 4 个样本,则会在图面格式列表中报告以下条目。
DDPIXELFORMAT ddpf;
ZeroMemory(&ddpf, sizeof(ddpf));
ddpf.dwSize = sizeof(DDPIXELFORMAT);
ddpf.dwFlags = DDPF_D3DFORMAT;
ddpf.dwFourCC = D3DFMT_X8R8G8B8;
ddpf.dwOperations = D3DFORMAT_OP_DISPLAYMODE |
D3DFORMAT_OP_3DACCELERATION;
ddpf.MultiSampleCaps.wFlipMSTypes = (1 << (D3DMULTISAMPLE_4_SAMPLES âˆ' 1))
| (1 << (D3DMULTISAMPLE_2_SAMPLES âˆ' 1));
ddpf.MultiSampleCaps.wBltMSTypes = (1 << (D3DMULTISAMPLE_4_SAMPLES âˆ' 1));
报告格式时,无需指定 1 << (D3DMULTISAMPLE_NONE - 1) 。 假定报告的任何格式也可使用,而无需进行多重采样。 如果硬件支持使用 z 缓冲区进行多重采样呈现,则报告的 z 缓冲区格式还应包括受支持的每像素样本。
要求
要求 | 值 |
---|---|
Header | ksmedia.h (包括 Ddraw.h) |