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 像素格式的亮度数据有效。 将此标志用于仅亮度或亮度加 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 及更高版本的运行时对作(op)列表施加以下规则:

  • 仅允许任何 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的说明。

d3d8types.h 中定义的枚举类型D3DMULTISAMPLE_TYPE用于设置 wFlipMSTypes 中的 位,wBltMSTypes。 若要指定对每个像素特定样本数的支持,只需将相应值从D3DMULTISAMPLE_TYPE枚举类型减去 1,或将其移入适当的字段(wFlipMSTypeswBltMSTypes)。

例如,如果驱动程序在翻转(全屏模式)时支持每个像素的两个和四个样本,在X8R8G8B8图面上翻转(开窗模式)时每个像素支持四个样本,则会在图面格式列表中报告以下条目。

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 缓冲区格式还应包含支持的每像素样本。

要求

要求 价值
标头 ksmedia.h (包括 Ddraw.h)