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