Функция glPixelTransferf
Функции glPixelTransferf и glPixelTransferi задают режимы передачи пикселей.
Синтаксис
void WINAPI glPixelTransferf(
GLenum pname,
GLfloat 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 . Алгоритмы, заданные режимами передачи пикселей, работают с пикселями после их считывания из framebuffer (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 является целочисленным параметром, параметр округляется до ближайшего целого числа.
Аналогичным образом , 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 [только классические приложения] |
Заголовок |
|
Библиотека |
|
DLL |
|