Функция glPixelTransferi

Функции glPixelTransferf и glPixelTransferi задают режимы передачи пикселей.

Синтаксис

void WINAPI glPixelTransferi(
   GLenum pname,
   GLint  param
);

Параметры

pname

Символическое имя устанавливаемого параметра передачи пикселей. В следующей таблице приведены тип, начальное значение и диапазон допустимых значений для каждого из параметров передачи пикселей, заданных с помощью glPixelTransfer.

Pname Тип Начальное значение Допустимый диапазон значений
GL_MAP_COLOR Логическое false true/false
GL_MAP_STENCIL Логическое false true/false
GL_INDEX_SHIFT Целое число 0 (8,8)
GL_INDEX_OFFSET Целое число 0 (8,8)
GL_RED_SCALE Целое число 1,0 (8,8)
GL_GREEN_SCALE FLOAT 1,0 (8,8)
GL_BLUE_SCALE FLOAT 1,0 (8,8)
GL_ALPHA_SCALE FLOAT 1,0 (8,8)
GL_DEPTH_SCALE FLOAT 1,0 (8,8)
GL_RED_BIAS FLOAT 0,0 (8,8)
GL_GREEN_BIAS FLOAT 0,0 (8,8)
GL_BLUE_BIAS FLOAT 0,0 (8,8)
GL_ALPHA_BIAS FLOAT 0,0 (8,8)
GL_DEPTH_BIAS FLOAT 0,0 (8,8)

param

Значение, для параметра pname задано значение .

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

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

Комментарии

Функция glPixelTransfer задает режимы передачи пикселей, которые влияют на работу последующих команд glCopyPixels, glCopyTexImage1D, glCopyTexImage2D, glCopyTexSubImage1D, glCopyTexSubImage2D, glDrawPixels, glReadPixels, glTexImage1D, glTexImage2D, glTexSubImage1D и glTexSubImage2D . Алгоритмы, заданные режимами передачи пикселей, работают с пикселями после их считывания из буфера кадров (glReadPixels и glCopyPixels) или распаковки из памяти клиента (glDrawPixels, glTexImage1D и glTexImage2D). Операции передачи пикселей выполняются в одном и том же порядке, независимо от команды, которая привела к операции с пикселем. Режимы хранения пикселей (glPixelStore) управляют распаковкой пикселей, считываемых из памяти клиента, и упаковкой пикселей, записываемых обратно в память клиента.

Операции передачи пикселей обрабатывают четыре основных типа пикселей: цвет, индекс цвета, глубину и набор элементов. Цветные пиксели состоят из четырех значений с плавающей запятой с неопределенными размерами мантиссы и экспоненты, масштабируемых таким образом, что 0,0 представляет нулевую интенсивность, а 1,0 — полную интенсивность. Цветовые индексы состоят из одного значения с фиксированной точкой с неопределенной точностью справа от двоичной точки. Пиксели глубины содержат одно значение с плавающей запятой с неопределенными размерами мантиссы и экспоненты, масштабируемые таким образом, что 0,0 представляет собой минимальное значение буфера глубины, а 1,0 — максимальное значение буфера глубины. Наконец, пиксели трафарета содержат одно значение с фиксированной точкой с неопределенной точностью справа от двоичной точки.

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

Тип пикселя Операция передачи пикселей
Цвет Каждый из четырех компонентов цвета умножается на коэффициент масштабирования, а затем добавляется к коэффициенту смещения. То есть красный компонент умножается на GL_RED_SCALE, а затем добавляется в GL_RED_BIAS; зеленый компонент умножается на GL_GREEN_SCALE, а затем добавляется в GL_GREEN_BIAS; синий компонент умножается на GL_BLUE_SCALE, а затем добавляется в GL_BLUE_BIAS; и альфа-компонент умножается на GL_ALPHA_SCALE, а затем добавляется в GL_ALPHA_BIAS. После масштабирования и смещения всех четырех компонентов цвета каждый из них зажимается в диапазоне [0,1]. Все значения цветовой шкалы и смещения указываются с помощью glPixelTransfer.
Если GL_MAP_COLOR имеет значение true, каждый компонент цвета масштабируется в зависимости от размера соответствующей цветовой карты, а затем заменяется содержимым этой карты, индексируемой масштабируемым компонентом. То есть красный компонент масштабируется GL_PIXEL_MAP_R_TO_R_SIZE, а затем заменяется на содержимое GL_PIXEL_MAP_R_TO_R индексируется сам по себе. Зеленый компонент масштабируется GL_PIXEL_MAP_G_TO_G_SIZE, а затем заменяется содержимым GL_PIXEL_MAP_G_TO_G индексируется сам по себе. Синий компонент масштабируется GL_PIXEL_MAP_B_TO_B_SIZE, а затем заменяется содержимым GL_PIXEL_MAP_B_TO_B индексируется сам по себе. Альфа-компонент масштабируется GL_PIXEL_MAP_A_TO_A_SIZE, а затем заменяется содержимым GL_PIXEL_MAP_A_TO_A индексируется сам по себе. Все компоненты, взятые из карт, затем зажимаются в диапазоне [0,1]. GL_MAP_COLOR указывается с помощью glPixelTransfer. Содержимое различных карт указывается с помощью glPixelMap.
Индекс цвета Каждый цветовый индекс смещается влево GL_INDEX_SHIFT битами, заполняя нулями любые биты, превышающие число битов дроби, переносимых индексом фиксированной точки. Если GL_INDEX_SHIFT отрицательное, сдвиг будет вправо и снова заполнен нулевым значением. GL_INDEX_OFFSET добавляется в индекс. GL_INDEX_SHIFT и GL_INDEX_OFFSET указываются с помощью glPixelTransfer.
С этого момента операции расходятся в зависимости от требуемого формата результирующего пикселя. Если полученные пиксели записываются в буфер цветовых индексов или считываются обратно в память клиента в GL_COLOR_INDEX формате, пиксели по-прежнему обрабатываются как индексы. Если GL_MAP_COLOR имеет значение true, каждый индекс маскируется с помощью 2 ^ n 1, где n — GL_PIXEL_MAP_I_TO_I_SIZE, а затем заменяется содержимым GL_PIXEL_MAP_I_TO_I индексируется маскируемым значением. GL_MAP_COLOR указывается с помощью glPixelTransfer. Содержимое карты индекса указывается с помощью glPixelMap.
Если полученные пиксели записываются в цветовой буфер RGBA или считываются обратно в память клиента в формате, отличном от GL_COLOR_INDEX, пиксели преобразуются из индексов в цвета путем ссылки на четыре карты GL_PIXEL_MAP_I_TO_R, GL_PIXEL_MAP_I_TO_G. GL_PIXEL_MAP_I_TO_B и GL_PIXEL_MAP_I_TO_A. Перед разыменовкой индекс маскируется 2 n 1, где n — это GL_PIXEL_MAP_I_TO_R_SIZE для красной карты, GL_PIXEL_MAP_I_TO_G_SIZE для зеленой карты, GL_PIXEL_MAP_I_TO_B_SIZE для синей карты и GL_PIXEL_MAP_I_TO_A_SIZE для альфа-карты. Все компоненты, взятые из карт, затем зажимаются в диапазоне [0,1]. Содержимое четырех карт указывается с помощью glPixelMap.
Глубина Каждое значение глубины умножается на GL_DEPTH_SCALE, добавляется в GL_DEPTH_BIAS, а затем зажимается в диапазон [0,1].
Stencil Каждый индекс сдвигается GL_INDEX_SHIFT битами так же, как индекс цвета, а затем добавляется в GL_INDEX_OFFSET. Если GL_MAP_STENCIL имеет значение true, каждый индекс маскируется с помощью 2n 1, где n — GL_PIXEL_MAP_S_TO_S_SIZE, а затем заменяется содержимым GL_PIXEL_MAP_S_TO_S индексируется маскируемым значением.

Функцию glPixelTransferf можно использовать для установки любого параметра передачи пикселей. Если параметр имеет тип Boolean, значение 0.0 подразумевает значение false, а любое другое значение — true. Если pname является целочисленным параметром, аргумент param округляется до ближайшего целого числа.

Аналогичным образом , glPixelTransferi также можно использовать для задания любого из параметров передачи пикселей. Логические параметры имеют значение false, если параметр имеет значение 0, в противном случае — true. Параметр param преобразуется в число с плавающей запятой, а затем назначается параметрам с реальным значением.

Если команда glDrawPixels, glReadPixels, glCopyPixels, glTexImage1D или glTexImage2D помещается в список отображения (см. glNewList и glCallList), то при выполнении списка отображения используются параметры режима передачи пикселей. Они могут отличаться от параметров при компиляции команды в список отображения.

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

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

glGet с GL_MAP_STENCIL аргументов

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

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

glGet с GL_RED_SCALE аргументов

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

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

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

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

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

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

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

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

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

Требования

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

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

glBegin

glCallList

glCopyPixels

glDrawPixels

glEnd

glNewList

glPixelMap

glPixelStore

glPixelZoom

glReadPixels

glTexImage1D

glTexImage2D