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
|
缓冲区可以绘制到窗口或设备图面。 |
PFD_DRAW_TO_BITMAP
|
缓冲区可以绘制到内存位图。 |
PFD_SUPPORT_GDI
|
缓冲区支持 GDI 绘图。 此标志和PFD_DOUBLEBUFFER在当前泛型实现中互斥。 |
PFD_SUPPORT_OPENGL
|
缓冲区支持 OpenGL 绘图。 |
PFD_GENERIC_ACCELERATED
|
像素格式受加速通用实现的设备驱动程序支持。 如果此标志清晰且设置了PFD_GENERIC_FORMAT标志,则仅泛型实现支持像素格式。 |
PFD_GENERIC_FORMAT
|
像素格式受 GDI 软件实现(也称为泛型实现)的支持。 如果此位明确,则设备驱动程序或硬件支持像素格式。 |
PFD_NEED_PALETTE
|
缓冲区在调色板管理的设备上使用 RGBA 像素。 需要逻辑调色板才能实现此像素类型的最佳结果。 调色板中的颜色应根据 cRedBits、 cRedShift、 cGreenBits、 cGreenShift、 cBluebits 和 cBlueShift 成员的值指定。 在调用 wglMakeCurrent 之前,应在设备上下文中创建和实现调色板。 |
PFD_NEED_SYSTEM_PALETTE
|
在仅支持 256 色模式下一个硬件调色板的硬件的像素格式描述符中定义。 要使此类系统使用硬件加速,硬件调色板必须按固定顺序 (例如,在 RGBA 模式下为 3-3-2) ,或者在颜色索引模式下必须匹配逻辑调色板。设置此标志后,必须在程序中调用 SetSystemPaletteUse ,以强制逻辑调色板和系统调色板的一对一映射。 如果 OpenGL 硬件支持多个硬件调色板,并且设备驱动程序可以为 OpenGL 分配备用硬件调色板,则此标志通常很明确。
此标志未在通用像素格式中设置。 |
PFD_DOUBLEBUFFER
|
缓冲区是双缓冲的。 此标志和PFD_SUPPORT_GDI在当前泛型实现中互斥。 |
PFD_STEREO
|
缓冲区是立体的。 当前泛型实现不支持此标志。 |
PFD_SWAP_LAYER_BUFFERS
|
指示设备是否可以交换包含双缓冲覆盖层或底层平面的像素格式的单个层平面。 否则,所有层平面将一起交换为一个组。 设置此标志时,支持 wglSwapLayerBuffers 。 |
调用 ChoosePixelFormat 时,可以指定以下位标志。
值 | 含义 |
---|---|
PFD_DEPTH_DONTCARE
|
请求的像素格式可以具有深度缓冲区,也可以没有深度缓冲区。 若要选择没有深度缓冲区的像素格式,必须指定此标志。 请求的像素格式可以是带深度缓冲区,也可以不带深度缓冲区。 否则,仅考虑具有深度缓冲区的像素格式。 |
PFD_DOUBLEBUFFER_DONTCARE
|
请求的像素格式可以是单缓冲或双缓冲。 |
PFD_STEREO_DONTCARE
|
请求的像素格式可以是单视或立体。 |
使用 glAddSwapHintRectWIN 扩展函数时, PIXELFORMATDESCRIPTOR 像素格式结构包含两个新标志。
值 | 含义 |
---|---|
PFD_SWAP_COPY
|
在缓冲区交换后,指定双缓冲main颜色平面中后台缓冲区的内容。 交换颜色缓冲区会导致将后台缓冲区的内容复制到前缓冲区。 后台缓冲区的内容不受交换的影响。 PFD_SWAP_COPY只是一个提示,可能不会由驱动程序提供。 |
PFD_SWAP_EXCHANGE
|
在缓冲区交换后,指定双缓冲main颜色平面中后台缓冲区的内容。 交换颜色缓冲区会导致后台缓冲区的内容与前缓冲区的内容交换。 交换后,后台缓冲区的内容包含交换前缓冲区的内容。 PFD_SWAP_EXCHANGE只是一个提示,可能不会由驱动程序提供。 |
iPixelType
指定像素数据的类型。 定义了以下类型。
值 | 含义 |
---|---|
PFD_TYPE_RGBA
|
RGBA 像素。 每个像素按以下顺序具有四个分量:红色、绿色、蓝色和 alpha。 |
PFD_TYPE_COLORINDEX
|
颜色索引像素。 每个像素使用颜色索引值。 |
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 |