Функция 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 [только классические приложения]
Заголовок
Gl.h
Библиотека
Opengl32.lib
DLL
Opengl32.dll

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

glBegin

glCallList

glCopyPixels

glDrawPixels

glEnd

glNewList

glPixelMap

glPixelStore

glPixelZoom

glReadPixels

glTexImage1D

glTexImage2D