glPixelStorei 函数

设置像素存储模式。

语法

void WINAPI glPixelStorei(
   GLenum pname,
   GLint  param
);

参数

pname

要设置的参数的符号名称。 其中六个存储参数会影响像素数据返回到客户端内存的方式,因此仅对 glReadPixels 命令非常重要。 它们如下所示。

存储参数 说明
GL_PACK_SWAP_BYTES 如果为 true,则多字节颜色分量、深度分量、颜色索引或模具索引的字节顺序将颠倒。 也就是说,如果四字节组件由字节 b0、b 1、b2、b3 组成,则如果GL_PACK_SWAP_BYTES为 true,则它将作为 b3、b2、b1、b0 存储在内存中。 GL_PACK_SWAP_BYTES对像素内组件的内存顺序没有影响,仅影响组件或索引中的字节顺序。 例如,GL_RGB格式像素的三个分量始终以红色第一、绿色第二和蓝色第三的形式存储,而不考虑GL_PACK_SWAP_BYTES的值。
GL_PACK_LSB_FIRST 如果为 true,则位在字节内从最小有效到最有效的顺序排列;否则,每个字节中的第一个位是最重要的位。 此参数仅对位图数据很重要。
GL_PACK_ROW_LENGTH 如果大于零,GL_PACK_ROW_LENGTH定义一行中的像素数。 如果行的第一个像素放置在内存中的位置 p,则通过跳过公式来获取下一行的第一个像素的位置GL_PACK_ROW_LENGTH。[newline] 组件或索引,其中 n 是像素中的组件或索引数,l 是行中的像素数 (gl-pack-row-length(如果大于零),则为像素例程的 width 参数) ,a 是 gl-pack-alignment 的值,s 是单个分量的大小(以字节为单位), (如果<为则为 , 那么就好像) = 。 如果为 1 位值,则通过跳过公式来获取下一行的位置 GL_PACK_ROW_LENGTH。
组件或索引。 此说明中的单词 组件 是指非索引值红色、绿色、蓝色、alpha 和深度。 例如,存储格式GL_RGB每个像素有三个分量:第一个是红色,然后是绿色,最后是蓝色。
GL_PACK_SKIP_PIXELS 和
GL_PACK_SKIP_ROWS
这些值为方便程序员提供;它们不提供任何无法仅通过递增传递给 glReadPixel 的指针来复制的功能。 将 GL_PACK_SKIP_PIXELS 设置为 i 等效于按 i n 个分量或索引递增指针,其中 n 是每个像素中的组件或索引数。 将 GL_PACK_SKIP_ROWS 设置为 j 等效于按 j k 分量或索引递增指针,其中 k 是每行的组件数或索引数,如上GL_PACK_ROW_LENGTH部分计算。
GL_PACK_ALIGNMENT 指定内存中每个像素行的开头的对齐要求。 允许的值为 1 (字节对齐) 、2 (行与偶数字节对齐) 、4 (字对齐) ,以及 8 (行从双字边界) 开始。

其他六个存储参数会影响从客户端内存读取像素数据的方式。 这些值对于 glDrawPixelsglTexImage1DglTexImage2DglBitmapglPolygonStipple 是重要的。 这些限制如下:

存储参数 说明
GL_UNPACK_SWAP_BYTES 如果为 true,则多字节颜色分量、深度分量、颜色索引或模具索引的字节顺序将颠倒。 也就是说,如果四字节组件由字节 b0、 b1、 b2、 b3 组成,则如果GL_UNPACK_SWAP_BYTES为 true,则内存中存储为 b3、 b2、 b1、 b0。 GL_UNPACK_SWAP_BYTES对像素内组件的内存顺序没有影响,仅影响组件或索引中的字节顺序。 例如,无论GL_UNPACK_SWAP_BYTES的值如何,GL_RGB格式像素的三个分量始终以红色第一、绿色第二和蓝色第三的形式存储。
GL_UNPACK_LSB_FIRST 如果为 true,则位在字节内从最小有效到最有效的顺序排列;否则,每个字节中的第一个位是最重要的位。 这仅适用于位图数据。
GL_UNPACK_ROW_LENGTH 如果大于零,GL_UNPACK_ROW_LENGTH定义行中的像素数。 如果行的第一个像素放置在内存中的位置 p,则通过跳过公式来获取下一行的第一个像素的位置GL_UNPACK_ROW_LENGTH。[newline] 组件或索引,其中 n 是像素中的组件或索引数,l 是行中的像素数 (gl-pack-row-length(如果大于零),则为像素例程的 width 参数) ,a 是 gl-pack-alignment 的值,s 是单个分量的大小(以字节为单位), (如果<为则为 , 那么就好像) = 。 如果为 1 位值,则通过跳过公式来获取下一行的位置 GL_UNPACK_ROW_LENGTH。
组件或索引。 此说明中的单词 组件 是指非索引值红色、绿色、蓝色、alpha 和深度。 例如,存储格式GL_RGB每个像素有三个分量:第一个是红色,然后是绿色,最后是蓝色。
GL_UNPACK_SKIP_PIXELS 和
GL_UNPACK_SKIP_ROWS
这些值为方便程序员提供;它们不提供任何无法复制的功能,只需递增传递给 glDrawPixelsglTexImage1D、glTexImage2DglBitmapglPolygonStipple 的指针即可。 将 GL_UNPACK_SKIP_PIXELS 设置为 i 等效于按 i n 个分量或索引递增指针,其中 n 是每个像素中的组件或索引数。 将 GL_UNPACK_SKIP_ROWS 设置为 j 等效于按 j k 分量或索引递增指针,其中 k 是每行的组件数或索引数,如上面GL_UNPACK_ROW_LENGTH部分计算。
GL_UNPACK_ALIGNMENT 指定内存中每个像素行的开头的对齐要求。 允许的值为 1 (字节对齐) 、2 (行与偶数字节对齐) 、4 (字对齐) ,以及 8 (行从双字边界) 开始。

param

pname 设置为 的值。

返回值

此函数不返回值。

注解

glPixelStore 函数设置像素存储模式,这些模式会影响后续 glDrawPixelsglReadPixel 的操作,以及多边形 stipple 模式的解包, (请参阅 glPolygonStipple) , 位图 (见 glBitmap) ,纹理图案 (见 glTexImage1DglTexImage2DglTexSubImage1DglTexSubImage2D) 。

下表提供了可使用 glPixelStore 设置的每个存储参数的类型、初始值和有效值范围。

Pname 类型 初始值 有效的范围
GL_PACK_SWAP_BYTES Boolean false true 或 false
GL_PACK_SWAP_BYTES Boolean false true 或 false
GL_PACK_ROW_LENGTH integer 0 [0,?)
GL_PACK_SKIP_ROWS integer 0 [0,?)
GL_PACK_SKIP_PIXELS integer 0 [0,?)
GL_PACK_ALIGNMENT 整型 4 1、2、4 或 8
GL_UNPACK_SWAP_BYTES Boolean false true 或 false
GL_UNPACK_LSB_FIRST Boolean false true 或 false
GL_UNPACK_ROW_LENGTH integer 0 [0,?)
GL_UNPACK_SKIP_ROWS integer 0 [0,?)
GL_UNPACK_SKIP_PIXELS integer 0 [0,?)
GL_UNPACK_ALIGNMENT 整型 4 1、2、4 或 8

glPixelStoref 函数可用于设置任何像素存储参数。 如果参数类型为布尔值,并且 param 为 0.0,则参数为 false;否则设置为 true。 如果 pname 是整数类型参数,则 参数 将舍入为最接近的整数。

同样, glPixelStorei 函数也可用于设置任何像素存储参数。 如果 param 为 0,则布尔参数设置为 false,否则设置为 true。 参数在分配给实值参数之前转换为浮点。

glDrawPixelsglReadPixelsglTexImage1DglTexImage2DglBitmapglPolygonStipple 置于显示列表中时,像素存储模式将有效控制内存数据的解释。 执行显示列表时生效的像素存储模式并不重要。

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

带参数GL_PACK_SWAP_BYTES的 glGet

带参数GL_PACK_LSB_FIRST的 glGet

带参数GL_PACK_ROW_LENGTH的 glGet

带参数GL_PACK_SKIP_ROWS的 glGet

带参数GL_PACK_SKIP_PIXELS的 glGet

带参数GL_PACK_ALIGNMENT的 glGet

带参数GL_UNPACK_SWAP_BYTES的 glGet

带参数GL_UNPACK_LSB_FIRST的 glGet

带参数GL_UNPACK_ROW_LENGTH的 glGet

带参数GL_UNPACK_SKIP_ROWS的 glGet

带参数GL_UNPACK_SKIP_PIXELS的 glGet

带参数GL_UNPACK_ALIGNMENT的 glGet

要求

要求
最低受支持的客户端
Windows 2000 Professional [仅限桌面应用]
最低受支持的服务器
Windows 2000 Server [仅限桌面应用]
标头
Gl.h

Opengl32.lib
DLL
Opengl32.dll

另请参阅

glBegin

glBitmap

glDrawPixels

glEnd

glPixelMap

glPixelTransfer

glPixelZoom

glPolygonStipple

glReadPixels

glTexImage1D

glTexImage2D