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 及更高版本的运行时对操作 (操作) 列表施加以下规则:

  • 仅允许任何 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。 若要指定对每个像素特定样本数的支持,只需将适当的值从D3DMULTISAMPLE_TYPE枚举类型中移出 1,或者将其转换为相应的字段, (wFlipMSTypeswBltMSTypes) 。

例如,如果在 x8R8G8B8 图面上翻转 (全屏模式) 时,驱动程序同时支持每个像素的两个和四个样本,并在 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 缓冲区格式还应包含受支持的每像素样本。

要求

   
Header ksmedia.h (包括 Ddraw.h)