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