glPixelTransferf 函数

glPixelTransferfglPixelTransferi 函数设置像素传输模式。

语法

void WINAPI glPixelTransferf(
   GLenum  pname,
   GLfloat param
);

parameters

pname

要设置的像素传输参数的符号名称。 下表提供了使用 glPixelTransfer 设置的每个像素传输参数的类型、初始值和有效值范围。

Pname 类型 初始值 有效的范围
GL_MAP_COLOR Boolean false true/false
GL_MAP_STENCIL Boolean false true/false
GL_INDEX_SHIFT integer 0 (8,8)
GL_INDEX_OFFSET integer 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 函数设置影响后续 glCopyPixel 操作的像素传输模式, glCopyTexImage1DglCopyTexImage2DglCopyTexSubImage1DglCopyTexSubImage2DglDrawPixelsglReadPixelsglTexImage1DglTexImage2DglTexSubImage1DglTexSubImage2D 命令。 像素传输模式指定的算法在从 framebuffer (glReadPixelsglCopyPixels 读取或从客户端内存) (glDrawPixelsglTexImage1DglTexImage2D) 中解压缩后,对像素进行操作。 无论导致像素操作的命令如何,像素传输操作都以相同的顺序和方式发生。 像素存储模式 (glPixelStore) 控制从客户端内存中读取的像素的解压缩,以及写入回客户端内存的像素的打包。

像素传输操作处理四种基本像素类型: 颜色颜色索引深度模具。颜色像素由四个浮点值组成,具有未指定的尾数和指数大小,缩放为 0.0 表示零强度,1.0 表示完全强度。 颜色索引由单个定点值组成,二进制点右侧具有未指定的精度。 深度像素由单个浮点值组成,具有未指定的尾数和指数大小,缩放为 0.0 表示最小深度缓冲区值,1.0 表示最大深度缓冲区值。 最后,模具像素由一个定点值组成,二进制点右侧具有未指定的精度。

对四种基本像素类型执行的像素传输操作如下所示:

像素类型 像素传输操作
Color 四个颜色分量分别乘以比例因子,然后添加到偏置因子。 也就是说,红色分量乘以GL_RED_SCALE,然后添加到GL_RED_BIAS;绿色分量乘以GL_GREEN_SCALE,然后添加到GL_GREEN_BIAS;蓝色分量乘以GL_BLUE_SCALE,然后添加到GL_BLUE_BIAS;alpha 分量乘以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的内容。 alpha 分量按GL_PIXEL_MAP_A_TO_A_SIZE缩放,然后替换为自行编制索引的GL_PIXEL_MAP_A_TO_A的内容。 然后,从映射中提取的所有组件被固定到 [0,1] 范围内。 使用 glPixelTransfer 指定GL_MAP_COLOR。 使用 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,alpha 地图GL_PIXEL_MAP_I_TO_A_SIZE。 然后,从映射获取的所有组件被固定到 [0,1] 范围。 四个映射的内容是使用 glPixelMap 指定的。
深度 每个深度值乘以GL_DEPTH_SCALE,添加到GL_DEPTH_BIAS,然后固定到 [0,1] 范围。
模具 每个索引与颜色索引一样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 也可用于设置任何像素传输参数。 如果 参数 为 0,则布尔参数设置为 false,否则为 true。 参数在分配给实值参数之前将转换为浮点。

如果 glDrawPixelsglReadPixelsglCopyPixelsglTexImage1DglTexImage2D 命令放置在显示列表中, (请参阅 glNewListglCallList) , 则执行 显示列表时生效的像素传输模式设置是所使用的设置。 当命令编译到显示列表中时,它们可能与设置不同。

以下函数检索与 glPixelTransfer 相关的信息:

带参数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的 glGet

要求

要求
最低受支持的客户端
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