Функция glDrawPixels

Функция glDrawPixels записывает блок пикселей в framebuffer.

Синтаксис

void WINAPI glDrawPixels(
         GLsizei width,
         GLsizei height,
         GLenum  format,
         GLenum  type,
   const GLvoid  *pixels
);

Параметры

width

Измерение ширины прямоугольника пикселя, которое будет записано в framebuffer.

height

Измерение высоты прямоугольника пикселя, которое будет записано в framebuffer.

format

Формат данных пикселей. Допустимые символьные константы приведены ниже.

Значение Значение
GL_COLOR_INDEX
Каждый пиксель — это одно значение, цветовый индекс.
  1. Функция glDrawPixels преобразует каждый пиксель в формат фиксированной точки с неопределенным числом битов справа от двоичной точки независимо от типа данных памяти. Значения с плавающей запятой преобразуются в истинные значения фиксированной точки. Функция glDrawPixels преобразует целочисленные данные со знаком и без знака со всеми битами дробей, равными нулю. Функция преобразует растровые данные в 0,0 или 1.0.
  2. Функция glDrawPixels сдвигает каждый индекс фиксированной точки влево на GL_INDEX_SHIFT бит и добавляет его в GL_INDEX_OFFSET. Если GL_INDEX_SHIFT является отрицательным, сдвиг находится вправо. В любом случае нулевых битов заполняются в противном случае неопределенные битовые расположения в результатах.
  3. В режиме RGBA glDrawPixels преобразует полученный индекс в пиксель RGBA с помощью таблиц GL_PIXEL_MAP_I_TO_R, GL_PIXEL_MAP_I_TO_G, GL_PIXEL_MAP_I_TO_B и GL_PIXEL_MAP_I_TO_A таблиц. Если в режиме цветового индекса и GL_MAP_COLOR имеет значение true, индекс заменяется значением, ссылающимся на glDrawPixels в таблице подстановки GL_PIXEL_MAP_I_TO_I.
  4. Выполняется ли замена индекса подстановкой, целочисленная часть индекса имеет значение2b – 1, где b — количество битов в буфере цветового индекса.
  5. Результирующие индексы или цвета RGBA затем преобразуются в фрагменты, прикрепляя текущую позицию растра z и координаты текстуры к каждому пикселю, а затем присваивая координаты окна x и yфрагменту, такому как x? = Ширинамода xrn +
    Да? = yrn + /width
    где (xr, yr) — текущая растровая позиция.
  6. Функция glDrawPixels обрабатывает эти фрагменты пикселей так же, как фрагменты, созданные растровыми точками, линиями или многоугольниками. Он применяет сопоставление текстур, туман и все операции с фрагментами перед записью фрагментов в framebuffer.
GL_STENCIL_INDEX
Каждый пиксель является одним значением, индексом трафарета.
  1. Функция glDrawPixels преобразует ее в формат фиксированной точки с неопределенным числом битов справа от двоичной точки независимо от типа данных памяти. Значения с плавающей запятой преобразуются в истинные значения фиксированной точки. Функция glDrawPixels преобразует целочисленные данные со знаком и без знака со всеми битами дробей, равными нулю. Растровые данные преобразуются в 0.0 или 1.0.
  2. Функция glDrawPixels сдвигает каждый индекс фиксированной точки влево на GL_INDEX_SHIFT битов и добавляет его в GL_INDEX_OFFSET. Если GL_INDEX_SHIFT является отрицательным, сдвиг находится вправо. В любом случае нулевых битов заполняются в противном случае неопределенные битовые расположения в результатах.
  3. Если GL_MAP_STENCIL имеет значение true, индекс заменяется значением, которое glDrawPixels ссылается в таблице подстановки GL_PIXEL_MAP_S_TO_S.
  4. Выполняется ли замена индекса подстановкой, целочисленная часть индекса затем с2b – 1, где b — количество битов в буфере трафарета. Результирующие индексы трафаретов затем записываются в буфер трафарета таким образом, что n-й индекс записывается в расположение x? = Ширинамода xrn +
    Да? = yrn + /width
    где (xr ,yr) является текущей растровой позицией. Только тест владения пикселями, тест ножницы и маска записи трафарета влияют на эти операции записи.
GL_DEPTH_COMPONENT
Каждый пиксель является компонентом с одной глубиной.
  1. Функция glDrawPixels преобразует данные с плавающей запятой непосредственно во внутренний формат с плавающей запятой с неопределенной точностью. Целочисленные данные со знаком сопоставляются линейно с внутренним форматом с плавающей запятой, таким образом, что наиболее положительное представляющее целочисленное значение сопоставляется с 1,0, а наиболее отрицательное представляющее значение сопоставляется с -1,0. Целочисленные данные без знака сопоставляются аналогичным образом: наибольшее целочисленное значение сопоставляется с 1,0, а ноль сопоставляется с 0,0.
  2. Функция glDrawPixels умножает полученное значение глубины с плавающей запятой на GL_DEPTH_SCALE и добавляет его в GL_DEPTH_BIAS. Результат зажат в диапазоне [0,1].
  3. Функция glDrawPixels преобразует результирующие компоненты глубины в фрагменты, прикрепляя текущий цвет растрового положения или цветовый индекс и координаты текстуры к каждому пикселю, а затем присваивая координаты окна x и yфрагменту, например x? = Ширинамода xrn +
    Да? = yrn + /width
    где (xr ,yr) является текущей растровой позицией.
  4. Затем эти фрагменты пикселей обрабатываются так же, как и фрагменты, созданные растеризирующими точками, линиями или многоугольниками. Функция glDrawPixels применяет сопоставление текстур, туман и все операции фрагмента перед записью фрагментов в framebuffer.
GL_RGBA
Каждый пиксель представляет собой группу с четырьмя компонентами в следующем порядке: красный, зеленый, синий, альфа-канал.
  1. Функция glDrawPixels преобразует значения с плавающей запятой непосредственно во внутренний формат с плавающей запятой с неопределенной точностью. Целочисленные значения со знаком сопоставляются линейно с внутренним форматом с плавающей запятой таким образом, что наиболее положительное представляющее целое число сопоставляется с 1,0, а наиболее отрицательное представляющее значение сопоставляется с -1,0. Целочисленные данные без знака сопоставляются аналогичным образом: наибольшее целочисленное значение сопоставляется с 1,0, а ноль сопоставляется с 0,0.
  2. Функция glDrawPixels умножает полученные значения цвета с плавающей запятой на GL_c_SCALE и добавляет их в GL_c_BIAS, где c — RED, GREEN, BLUE и ALPHA для соответствующих компонентов цвета. Результаты зажаты к диапазону [0,1].
  3. Если GL_MAP_COLOR имеет значение true, glDrawPixels масштабирует каждый компонент цвета по размеру таблицы подстановки GL_PIXEL_MAP_c_TO_c, а затем заменяет компонент значением, на которое он ссылается в этой таблице; c — R, G, B или A соответственно.
  4. Функция glDrawPixels преобразует результирующие цвета RGBA в фрагменты, прикрепляя текущую координату z-координат растра и текстуры к каждому пикселю, а затем присваивая координаты окна x и yфрагменту, такому х? = Ширинамода xrn +
    Да? = yrn + /width
    где (xr ,yr) является текущей растровой позицией.
  5. Затем эти фрагменты пикселей обрабатываются так же, как и фрагменты, созданные растеризирующими точками, линиями или многоугольниками. Функция glDrawPixels применяет сопоставление текстур, туман и все операции фрагмента перед записью фрагментов в framebuffer.
GL_RED
Каждый пиксель является одним красным компонентом.
Функция glDrawPixels преобразует этот компонент во внутренний формат с плавающей запятой так же, как красный компонент пикселя RGBA, а затем преобразует его в пиксель RGBA с зеленым и синим значением 0,0, а альфа-набор — 1,0. После этого преобразования пиксель обрабатывается так же, как если бы он был прочитан как пиксель RGBA.
GL_GREEN
Каждый пиксель является одним зеленым компонентом.
Функция glDrawPixels преобразует этот компонент во внутренний формат с плавающей запятой так же, как зеленый компонент пикселя RGBA, а затем преобразует его в пиксель RGBA с красным и синим набором 0,0, а альфа-набор — 1,0. После этого преобразования пиксель обрабатывается так же, как если бы он был прочитан как пиксель RGBA.
GL_BLUE
Каждый пиксель является одним синим компонентом.
Функция glDrawPixels преобразует этот компонент во внутренний формат с плавающей запятой так же, как синий компонент пикселя RGBA, а затем преобразует его в пиксель RGBA с красным и зеленым значением 0,0, а альфа-набор — 1,0. После этого преобразования пиксель обрабатывается так же, как если бы он был прочитан как пиксель RGBA.
GL_ALPHA
Каждый пиксель является одним альфа-компонентом.
Функция glDrawPixels преобразует этот компонент во внутренний формат с плавающей запятой так же, как альфа-компонент пикселя RGBA, а затем преобразует его в пиксель RGBA с красным, зеленым и голубым значением 0,0. После этого преобразования пиксель обрабатывается так же, как если бы он был прочитан как пиксель RGBA.
GL_RGB
Каждый пиксель представляет собой группу из трех компонентов в следующем порядке: красный, зеленый, синий. Функция glDrawPixels преобразует каждый компонент во внутренний формат с плавающей запятой так же, как красные, зеленые и синие компоненты пикселя RGBA. Цвет тройной преобразуется в пиксель RGBA с альфа-набором 1,0. После этого преобразования пиксель обрабатывается так же, как если бы он был прочитан как пиксель RGBA.
GL_LUMINANCE
Каждый пиксель является одним компонентом яркости.
Функция glDrawPixels преобразует этот компонент во внутренний формат с плавающей запятой так же, как красный компонент пикселя RGBA, а затем преобразует его в пиксель RGBA с красным, зеленым и синим набором в преобразованное значение яркости, а альфа-набор — 1,0. После этого преобразования пиксель обрабатывается так же, как если бы он был прочитан как пиксель RGBA.
GL_LUMINANCE_ALPHA
Каждый пиксель представляет собой группу из двух компонентов в следующем порядке: яркость, альфа.
Функция glDrawPixels преобразует два компонента во внутренний формат с плавающей запятой так же, как красный компонент пикселя RGBA, а затем преобразует их в пиксель RGBA с красным, зеленым и синим набором в преобразованное значение яркости, а альфа-набор — преобразованное альфа-значение. После этого преобразования пиксель обрабатывается так же, как если бы он был прочитан как пиксель RGBA.
GL_BGR_EXT
Каждый пиксель представляет собой группу из трех компонентов в следующем порядке: синий, зеленый, красный.
GL_BGR_EXT предоставляет формат, соответствующий макету памяти Windows независимых от устройств растровых изображений (DIB). Таким образом, приложения могут использовать одни и те же данные с вызовами функций Windows и вызовами функций пикселей OpenGL.
GL_BGRA_EXT
Каждый пиксель представляет собой группу из четырех компонентов в следующем порядке: синий, зеленый, красный, альфа-канал.
GL_BGRA_EXT предоставляет формат, соответствующий макету памяти Windows независимых от устройств растровых изображений (DIB). Таким образом, приложения могут использовать одни и те же данные с вызовами функций Windows и вызовами функций пикселей OpenGL.

type

Тип данных для пикселей. Ниже приведены допустимые символические константы и их значения.

Значение Значение
GL_UNSIGNED_BYTE
8-разрядное целое число без знака
GL_BYTE
8-разрядное целое число со знаком
GL_BITMAP
Одиночные биты в 8-разрядных целых числах без знака
GL_UNSIGNED_SHORT
16-разрядное целое число без знака
GL_SHORT
16-разрядное целое число со знаком
GL_UNSIGNED_INT
32-разрядное целое число без знака
GL_INT
32-разрядное целое число
GL_FLOAT
С плавающей запятой с одной точностью

пиксели

Указатель на пиксельные данные.

Возвращаемое значение

Эта функция не возвращает значение.

Коды ошибок

Следующие коды ошибок можно получить с помощью функции glGetError .

Имя Значение
GL_INVALID_VALUE
Ширина или высота были отрицательными.
GL_INVALID_ENUM
Формат или тип не является допустимым значением.
GL_INVALID_OPERATION
формат был GL_RED, GL_GREEN, GL_BLUE, GL_ALPHA, GL_RGB, GL_RGBA, GL_BGR_EXT, GL_BGRA_EXT, GL_LUMINANCE или GL_LUMINANCE_ALPHA и OpenGL был в режиме цветового индекса.
GL_INVALID_ENUM
тип GL_BITMAP и формат не был либо GL_COLOR_INDEX, либо GL_STENCIL_INDEX.
GL_INVALID_OPERATION
формат был GL_STENCIL_INDEX и не было буфера трафарета.
GL_INVALID_OPERATION
Функция была вызвана между вызовом glBegin и соответствующим вызовом glEnd.

Remarks

Функция glDrawPixels считывает данные пикселей из памяти и записывает их в framebuffer относительно текущей позиции растра. Используйте glRasterPos , чтобы задать текущую растровую позицию и использовать glGet с аргументом GL_CURRENT_RASTER_POSITION для запроса растровой позиции.

Несколько параметров определяют кодировку данных пикселей в памяти и управляют обработкой данных пикселей перед их размещением в framebuffer. Эти параметры задаются с четырьмя функциями: glPixelStore, glPixelTransfer, glPixelMap и glPixelZoom. В этом разделе описываются последствия использования glDrawPixels многих, но не всех параметров, заданных этими четырьмя функциями.

Данные считываются из пикселей в виде последовательности подписанных или неподписанных байтов, подписанных или неподписанных шортов, целых чисел со знаком или без знака или значений с плавающей запятой с одной точностью в зависимости от типа. Каждый из этих байтов, шортов, целых чисел или значений с плавающей запятой интерпретируется как один компонент цвета или глубины или один индекс в зависимости от формата. Индексы всегда обрабатываются по отдельности. Цветовые компоненты обрабатываются как группы из одного, двух, трех или четырех значений, опять же на основе формата. Отдельные индексы и группы компонентов называются пикселями. Если тип GL_BITMAP, данные должны быть без знака байтами, а формат должен быть либо GL_COLOR_INDEX, либо GL_STENCIL_INDEX. Каждый байт без знака обрабатывается как восемь 1-разрядных пикселей с упорядочением битов, определяемым GL_UNPACK_LSB_FIRST (см. glPixelStore).

Ширина по высоте пикселей считывается из памяти, начиная с пикселей расположения. По умолчанию эти пиксели берутся из смежных расположений памяти, за исключением того, что после чтения всех пикселей ширины указатель чтения передвигается к следующей 4-байтовой границе. Функция glPixelStore задает выравнивание строк размером 4 байтов с GL_UNPACK_ALIGNMENT аргумента, и его можно задать равным 1, 2, 4 или 8 байтам. Другие параметры хранилища пикселей определяют различные улучшения указателя на чтение, как до чтения первого пикселя, так и после чтения всех пикселей ширины . Функция glPixelStore работает с каждым из пикселей ширины по высоте , которые она считывает из памяти таким же образом, исходя из значений нескольких параметров, заданных glPixelTransfer и glPixelMap. Сведения об этих операциях, а также целевой буфер, в который рисуются пиксели, относятся к формату пикселей, как указано в формате.

В описанной до сих пор растеризации предполагается, что коэффициент масштабирования пикселей равен 1,0. При использовании glPixelZoom для изменения коэффициентов масштабирования пикселей x и y пиксели преобразуются в фрагменты следующим образом. Если (xr,yr) является текущей позицией растра, а данный пиксель находится в n-м столбце и строке mth прямоугольника пикселя, то фрагменты создаются для пикселей, центры которых находятся в прямоугольнике с углами

(xr + масштаб? n, yrzoomym + )

(xr + масштаб? (n + 1), yrzoomy + (m + 1))

где масштаб? — это значение GL_ZOOM_X, а масштаб— значение GL_ZOOM_Y.

Следующие функции извлекают сведения, связанные с glDrawPixels:

glGet с аргументом GL_CURRENT_RASTER_POSITION

glGet с аргументом GL_CURRENT_RASTER_POSITION_VALID

Требования

Требование Значение
Минимальная версия клиента
Windows 2000 Professional [только классические приложения]
Минимальная версия сервера
Windows 2000 Server [только классические приложения]
Заголовок
Gl.h
Библиотека
Opengl32.lib
DLL
Opengl32.dll

См. также

glAlphaFunc

glBegin

glBlendFunc

glCopyPixels

glDepthFunc

glEnd

glGet

glLogicOp

glPixelMap

glPixelStore

glPixelTransfer

glPixelZoom

glRasterPos

glReadPixels

glScissor

glStencilFunc