Структура 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
Задает размер этой структуры данных. Это значение должно быть равно sizeof(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-цветовом режиме. Чтобы такие системы использовали аппаратное ускорение, аппаратная палитра должна быть в фиксированном порядке (например, 3-3-2) в режиме RGBA или должна соответствовать логической палитре в режиме цветовых индексов. Если этот флаг установлен, необходимо вызвать 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. Каждый пиксель имеет четыре компонента в этом порядке: красный, зеленый, синий и альфа-канал. |
PFD_TYPE_COLORINDEX
|
Пиксели индекса цвета. Каждый пиксель использует значение индекса цвета. |
cColorBits
Указывает количество цветовых битовых плоскостей в каждом цветовом буфере. Для типов пикселей RGBA это размер буфера цвета, за исключением альфа-битовых плоскостей. Для пикселей цветовых индексов это размер буфера цветовых индексов.
cRedBits
Указывает количество красных битовых плоскостей в каждом буфере цвета RGBA.
cRedShift
Указывает число сдвига для красных битовых плоскостей в каждом буфере цвета RGBA.
cGreenBits
Указывает количество зеленых битовых плоскостей в каждом цветовом буфере RGBA.
cGreenShift
Указывает число сдвига для зеленых битовых плоскостей в каждом буфере цвета RGBA.
cBlueBits
Указывает количество синих битовых плоскостей в каждом буфере цвета RGBA.
cBlueShift
Указывает число сдвига для синих битовых плоскостей в каждом цветовом буфере RGBA.
cAlphaBits
Указывает количество альфа-битовых плоскостей в каждом буфере цвета RGBA. Альфа-битовые плоскости не поддерживаются.
cAlphaShift
Задает число сдвига для альфа-битовых плоскостей в каждом буфере цвета RGBA. Альфа-битовые плоскости не поддерживаются.
cAccumBits
Указывает общее количество битовых плоскостей в буфере накопления.
cAccumRedBits
Указывает количество красных битовых плоскостей в буфере накопления.
cAccumGreenBits
Указывает количество зеленых битовых плоскостей в буфере накопления.
cAccumBlueBits
Указывает количество синих битовых плоскостей в буфере накопления.
cAccumAlphaBits
Указывает количество альфа-битовых плоскостей в буфере накопления.
cDepthBits
Задает глубину буфера глубины (оси Z).
cStencilBits
Задает глубину буфера трафарета.
cAuxBuffers
Указывает количество вспомогательных буферов. Вспомогательные буферы не поддерживаются.
iLayerType
Не обрабатывается. В более ранних реализациях OpenGL использовался этот элемент, но он больше не используется.
bReserved
Указывает количество плоскостей перекрытия и подложки. Биты от 0 до 3 указывают до 15 плоскостей наложения, а биты с 4 по 7 — до 15 плоскостей подложки.
dwLayerMask
Не обрабатывается. В более ранних реализациях OpenGL использовался этот элемент, но он больше не используется.
dwVisibleMask
Указывает прозрачный цвет или индекс подложной плоскости. Если тип пикселя — RGBA, dwVisibleMask — это прозрачное значение цвета RGB. Если типом пикселя является цветовый индекс, это значение прозрачного индекса.
dwDamageMask
Не обрабатывается. В более ранних реализациях OpenGL использовался этот элемент, но он больше не используется.
Комментарии
Обратите внимание, как описано выше, что некоторые свойства формата пикселей не поддерживаются в текущей универсальной реализации. Универсальная реализация — это реализация Программного обеспечения Microsoft GDI OpenGL. Производители оборудования могут расширять части OpenGL и поддерживать некоторые свойства формата пикселей, не поддерживаемые универсальной реализацией.
Требования
Требование | Значение |
---|---|
Минимальная версия клиента | Windows 2000 Professional [только классические приложения] |
Минимальная версия сервера | Windows 2000 Server [только классические приложения] |
Верхняя часть | wingdi.h |