Поделиться через


Структура 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
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 на устройстве, управляемом палитрой. Для достижения наилучших результатов для этого типа пикселей требуется логическая палитра. Цвета в палитре должны быть указаны в соответствии со значениями элементов cRedBits, cRedShift, cGreenBits, cGreenShift, cBluebits и cBlueShift . Палитра должна быть создана и реализована в контексте устройства перед вызовом wglMakeCurrent.
PFD_NEED_SYSTEM_PALETTE
0x00000100
Определяется в дескрипторах формата пикселей оборудования, поддерживающего одну аппаратную палитру только в 256-цветовом режиме. Чтобы такие системы использовали аппаратное ускорение, аппаратная палитра должна быть в фиксированном порядке (например, 3-3-2) в режиме RGBA или должна соответствовать логической палитре в режиме цветовых индексов. Если этот флаг установлен, необходимо вызвать 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. Каждый пиксель имеет четыре компонента в этом порядке: красный, зеленый, синий и альфа-канал.
PFD_TYPE_COLORINDEX
1
Пиксели индекса цвета. Каждый пиксель использует значение индекса цвета.

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

См. также раздел

ChoosePixelFormat

DescribePixelFormat

GetPixelFormat

OpenGL в Windows

SetPixelFormat

Структуры