PIXELFORMATDESCRIPTOR 结构 (wingdi.h)

PIXELFORMATDESCRIPTOR 结构描述绘图图面的像素格式。

语法

typedef struct tagPIXELFORMATDESCRIPTOR {
  WORD  nSize;
  WORD  nVersion;
  DWORD dwFlags;
  BYTE  iPixelType;
  BYTE  cColorBits;
  BYTE  cRedBits;
  BYTE  cRedShift;
  BYTE  cGreenBits;
  BYTE  cGreenShift;
  BYTE  cBlueBits;
  BYTE  cBlueShift;
  BYTE  cAlphaBits;
  BYTE  cAlphaShift;
  BYTE  cAccumBits;
  BYTE  cAccumRedBits;
  BYTE  cAccumGreenBits;
  BYTE  cAccumBlueBits;
  BYTE  cAccumAlphaBits;
  BYTE  cDepthBits;
  BYTE  cStencilBits;
  BYTE  cAuxBuffers;
  BYTE  iLayerType;
  BYTE  bReserved;
  DWORD dwLayerMask;
  DWORD dwVisibleMask;
  DWORD dwDamageMask;
} PIXELFORMATDESCRIPTOR, *PPIXELFORMATDESCRIPTOR, *LPPIXELFORMATDESCRIPTOR;

成员

nSize

指定此数据结构的大小。 此值应设置为 size (PIXELFORMATDESCRIPTOR) 。

nVersion

指定此数据结构的版本。 此值应设置为 1。

dwFlags

一组指定像素缓冲区属性的位标志。 这些属性通常不互斥:可以设置位标志的任意组合,但有一些例外。 定义了以下位标志常量。

含义
PFD_DRAW_TO_WINDOW
0x00000004
缓冲区可以绘制到窗口或设备图面。
PFD_DRAW_TO_BITMAP
0x00000008
缓冲区可以绘制到内存位图。
PFD_SUPPORT_GDI
0x00000010
缓冲区支持 GDI 绘图。 此标志和PFD_DOUBLEBUFFER在当前泛型实现中互斥。
PFD_SUPPORT_OPENGL
0x00000020
缓冲区支持 OpenGL 绘图。
PFD_GENERIC_ACCELERATED
0x00001000
像素格式受加速通用实现的设备驱动程序支持。 如果此标志清晰且设置了PFD_GENERIC_FORMAT标志,则仅泛型实现支持像素格式。
PFD_GENERIC_FORMAT
0x00000040
像素格式受 GDI 软件实现(也称为泛型实现)的支持。 如果此位明确,则设备驱动程序或硬件支持像素格式。
PFD_NEED_PALETTE
0x00000080
缓冲区在调色板管理的设备上使用 RGBA 像素。 需要逻辑调色板才能实现此像素类型的最佳结果。 调色板中的颜色应根据 cRedBitscRedShiftcGreenBitscGreenShiftcBluebitscBlueShift 成员的值指定。 在调用 wglMakeCurrent 之前,应在设备上下文中创建和实现调色板。
PFD_NEED_SYSTEM_PALETTE
0x00000100
在仅支持 256 色模式下一个硬件调色板的硬件的像素格式描述符中定义。 要使此类系统使用硬件加速,硬件调色板必须按固定顺序 (例如,在 RGBA 模式下为 3-3-2) ,或者在颜色索引模式下必须匹配逻辑调色板。设置此标志后,必须在程序中调用 SetSystemPaletteUse ,以强制逻辑调色板和系统调色板的一对一映射。 如果 OpenGL 硬件支持多个硬件调色板,并且设备驱动程序可以为 OpenGL 分配备用硬件调色板,则此标志通常很明确。

此标志未在通用像素格式中设置。

PFD_DOUBLEBUFFER
0x00000001
缓冲区是双缓冲的。 此标志和PFD_SUPPORT_GDI在当前泛型实现中互斥。
PFD_STEREO
0x00000002
缓冲区是立体的。 当前泛型实现不支持此标志。
PFD_SWAP_LAYER_BUFFERS
0x00000800
指示设备是否可以交换包含双缓冲覆盖层或底层平面的像素格式的单个层平面。 否则,所有层平面将一起交换为一个组。 设置此标志时,支持 wglSwapLayerBuffers
 

调用 ChoosePixelFormat 时,可以指定以下位标志。

含义
PFD_DEPTH_DONTCARE
0x20000000
请求的像素格式可以具有深度缓冲区,也可以没有深度缓冲区。 若要选择没有深度缓冲区的像素格式,必须指定此标志。 请求的像素格式可以是带深度缓冲区,也可以不带深度缓冲区。 否则,仅考虑具有深度缓冲区的像素格式。
PFD_DOUBLEBUFFER_DONTCARE
0x40000000
请求的像素格式可以是单缓冲或双缓冲。
PFD_STEREO_DONTCARE
0x80000000
请求的像素格式可以是单视或立体。
 

使用 glAddSwapHintRectWIN 扩展函数时, PIXELFORMATDESCRIPTOR 像素格式结构包含两个新标志。

含义
PFD_SWAP_COPY
0x00000400
在缓冲区交换后,指定双缓冲main颜色平面中后台缓冲区的内容。 交换颜色缓冲区会导致将后台缓冲区的内容复制到前缓冲区。 后台缓冲区的内容不受交换的影响。 PFD_SWAP_COPY只是一个提示,可能不会由驱动程序提供。
PFD_SWAP_EXCHANGE
0x00000200
在缓冲区交换后,指定双缓冲main颜色平面中后台缓冲区的内容。 交换颜色缓冲区会导致后台缓冲区的内容与前缓冲区的内容交换。 交换后,后台缓冲区的内容包含交换前缓冲区的内容。 PFD_SWAP_EXCHANGE只是一个提示,可能不会由驱动程序提供。

iPixelType

指定像素数据的类型。 定义了以下类型。

含义
PFD_TYPE_RGBA
0
RGBA 像素。 每个像素按以下顺序具有四个分量:红色、绿色、蓝色和 alpha。
PFD_TYPE_COLORINDEX
1
颜色索引像素。 每个像素使用颜色索引值。

cColorBits

指定每个颜色缓冲区中的颜色位平面数。 对于 RGBA 像素类型,它是颜色缓冲区的大小,不包括 alpha 位平面。 对于颜色索引像素,它是颜色索引缓冲区的大小。

cRedBits

指定每个 RGBA 颜色缓冲区中的红色位平面数。

cRedShift

指定每个 RGBA 颜色缓冲区中红色位平面的移位计数。

cGreenBits

指定每个 RGBA 颜色缓冲区中的绿色位平面数。

cGreenShift

指定每个 RGBA 颜色缓冲区中绿色位平面的移位计数。

cBlueBits

指定每个 RGBA 颜色缓冲区中的蓝色位平面数。

cBlueShift

指定每个 RGBA 颜色缓冲区中蓝色位平面的移位计数。

cAlphaBits

指定每个 RGBA 颜色缓冲区中的 alpha 位平面数。 不支持 Alpha 位平面。

cAlphaShift

指定每个 RGBA 颜色缓冲区中 alpha 位平面的移位计数。 不支持 Alpha 位平面。

cAccumBits

指定累积缓冲区中的位平面总数。

cAccumRedBits

指定累积缓冲区中的红色位平面数。

cAccumGreenBits

指定累积缓冲区中的绿色位平面数。

cAccumBlueBits

指定累积缓冲区中的蓝色位平面数。

cAccumAlphaBits

指定累积缓冲区中的 alpha 位平面数。

cDepthBits

指定 z 轴) 缓冲区 (深度。

cStencilBits

指定模具缓冲区的深度。

cAuxBuffers

指定辅助缓冲区的数目。 不支持辅助缓冲区。

iLayerType

已忽略。 OpenGL 的早期实现使用此成员,但不再使用它。

bReserved

指定覆盖平面和底层平面的数目。 位 0 到 3 最多指定 15 个覆盖平面,位 4 到 7 最多指定 15 个底层平面。

dwLayerMask

已忽略。 OpenGL 的早期实现使用此成员,但不再使用它。

dwVisibleMask

指定底纹平面的透明颜色或索引。 当像素类型为 RGBA 时, dwVisibleMask 是透明的 RGB 颜色值。 当像素类型为颜色索引时,它是透明索引值。

dwDamageMask

已忽略。 OpenGL 的早期实现使用此成员,但不再使用它。

注解

请仔细注意,如上所述,某些像素格式属性在当前的泛型实现中不受支持。 通用实现是 OpenGL 的 Microsoft GDI 软件实现。 硬件制造商可以增强 OpenGL 的某些部分,并且可能支持泛型实现不支持的某些像素格式属性。

要求

要求
最低受支持的客户端 Windows 2000 Professional [仅限桌面应用]
最低受支持的服务器 Windows 2000 Server [仅限桌面应用]
标头 wingdi.h

另请参阅

ChoosePixelFormat

DescribePixelFormat

GetPixelFormat

Windows 上的 OpenGL

SetPixelFormat

结构