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上限的说明。

设置 wFlipMSTypeswBltMSTypes 中的位时,将使用 d3d8types.h 中定义的枚举类型D3DMULTISAMPLE_TYPE。 若要指定对每个像素特定样本数的支持,只需按逻辑方式将 1 从D3DMULTISAMPLE_TYPE枚举类型减为 1,或者将其移动到 wFlipMSTypeswBltMSTypes) (相应字段。

例如,如果驱动程序在翻转 (全屏模式) 时支持每个像素两个和四个样本,在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)