Функция glDrawPixels

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

Синтаксис

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

Параметры

width

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

height

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

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. Независимо от того, выполняется ли замена индекса подстановкой, целочисленная часть индекса имеет значение ANDс 2b по 1, где b — количество битов в буфере цветового индекса.
  5. Полученные индексы или цвета RGBA затем преобразуются во фрагменты, прикрепляя текущую позицию растра z-координаты и координаты текстуры к каждому пикселю, а затем присваивая координаты окна x и yn-муфрагменту таким образом, что x? = xr + nmod width
    Да? = yr + n/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. Независимо от того, выполняется ли подстановка индекса или нет, целочисленная часть индекса затем edс 2b по 1, где b — количество битов в буфере набора элементов. Полученные индексы трафарета записываются в буфер трафарета таким образом, что n-йиндекс записывается в расположение x? = xr + nmod width
    Да? = yr + n/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 и yn-му фрагменту, так что x? = xr + nmod width
    Да? = yr + n/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 и yn-муфрагменту, так что x? = xr + nmod width
    Да? = yr + n /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 предоставляет формат, соответствующий макету памяти независимых от устройств растровых изображений (DIB) Windows. Таким образом, приложения могут использовать одни и те же данные при вызовах функций Windows и функциях пикселей OpenGL.
GL_BGRA_EXT
Каждый пиксель представляет собой группу из четырех компонентов в таком порядке: синий, зеленый, красный, альфа.
GL_BGRA_EXT предоставляет формат, соответствующий макету памяти независимых от устройств растровых изображений (DIB) Windows. Таким образом, приложения могут использовать одни и те же данные при вызовах функций 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.

Комментарии

Функция 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-мстолбце и m-йстроке пиксельного прямоугольника, то фрагменты создаются для пикселей, центры которых находятся в прямоугольнике с углами в

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

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

Где масштаб? — значение GL_ZOOM_X, а масштабy — значение 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