Функция glDrawPixels
Функция glDrawPixels записывает блок пикселей в framebuffer.
Синтаксис
void WINAPI glDrawPixels(
GLsizei width,
GLsizei height,
GLenum format,
GLenum type,
const GLvoid *pixels
);
Параметры
-
width
-
Размер ширины прямоугольника пикселя, который будет записан в framebuffer.
-
height
-
Размер высоты прямоугольника пикселя, который будет записан в фреймбуфер.
-
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.
- Независимо от того, выполняется ли замена индекса подстановкой, целочисленная часть индекса имеет значение ANDс 2b по 1, где b — количество битов в буфере цветового индекса.
- Полученные индексы или цвета RGBA затем преобразуются во фрагменты, прикрепляя текущую позицию растра z-координаты и координаты текстуры к каждому пикселю, а затем присваивая координаты окна x и yn-муфрагменту таким образом, что x?
=
xr + nmod width
Да? = yr + n/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.
- Независимо от того, выполняется ли подстановка индекса или нет, целочисленная часть индекса затем edс 2b по 1, где b — количество битов в буфере набора элементов. Полученные индексы трафарета записываются в буфер трафарета таким образом, что n-йиндекс записывается в расположение x?
=
xr + nmod width
Да? = yr + n/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 и yn-му фрагменту, так что x?
=
xr + nmod width
Да? = yr + n/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 и yn-муфрагменту, так что x?
=
xr + nmod width
Да? = yr + n /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 предоставляет формат, соответствующий макету памяти независимых от устройств растровых изображений (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_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. |
Комментарии
Функция 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 [только классические приложения] |
Заголовок |
|
Библиотека |
|
DLL |
|