WebGLRenderingContext: pixelStorei() 方法

Baseline 已广泛支持

此特性已相当成熟,可在许多设备和浏览器版本上使用。自 ⁨2015 年 7 月⁩以来,各浏览器均已提供此特性。

注意:此功能在 Web Workers 中可用。

WebGLRenderingContext.pixelStorei() 方法是 WebGL API 的一部分,用于指定像素存储模式。

语法

js
pixelStorei(pname, param)

参数

pname

一个 GLenum,指定要设置的参数。可能的取值见下方。

pname

一个 GLint,指定要为 pname 参数设置的值。可能的取值见下方。

返回值

无(undefined)。

像素存储参数

参数名 (对应 pname) 描述 类型 默认值 允许的取值 (对应 param) 指定于
gl.PACK_ALIGNMENT 像素数据在内存中的打包方式。 GLint 4 1, 2, 4, 8 OpenGL ES 2.0
gl.UNPACK_ALIGNMENT 像素数据从内存中的解包方式。 GLint 4 1, 2, 4, 8 OpenGL ES 2.0
gl.UNPACK_FLIP_Y_WEBGL 如果为 true,则将源数据沿其垂直轴翻转。 GLboolean false true, false WebGL
gl.UNPACK_PREMULTIPLY_ALPHA_WEBGL 将 Alpha 通道乘以其他颜色通道。 GLboolean false true, false WebGL
gl.UNPACK_COLORSPACE_CONVERSION_WEBGL 默认颜色空间转换或不进行颜色空间转换。 GLenum gl.BROWSER_DEFAULT_WEBGL gl.BROWSER_DEFAULT_WEBGL, gl.NONE WebGL

使用 WebGL 2 上下文时,还可以使用以下值:

常量 描述 类型 默认值 允许的取值 (对应 param) 指定于
gl.PACK_ROW_LENGTH 每行像素的数量。 GLint 0 0 到 Infinity OpenGL ES 3.0
gl.PACK_SKIP_PIXELS 在将第一个像素写入内存之前跳过的像素位置数量。 GLint 0 0 到 Infinity OpenGL ES 3.0
gl.PACK_SKIP_ROWS 在将第一个像素写入内存之前跳过的像素行数量。 GLint 0 0 到 Infinity OpenGL ES 3.0
gl.UNPACK_ROW_LENGTH 每行像素的数量。 GLint 0 0 到 Infinity OpenGL ES 3.0
gl.UNPACK_IMAGE_HEIGHT 从内存读取像素数据时使用的图像高度。 GLint 0 0 到 Infinity OpenGL ES 3.0
gl.UNPACK_SKIP_PIXELS 在从内存读取第一个像素图像之前跳过的像素图像数量。 GLint 0 0 到 Infinity OpenGL ES 3.0
gl.UNPACK_SKIP_ROWS 在从内存读取第一个像素之前跳过的像素行数量。 GLint 0 0 到 Infinity OpenGL ES 3.0
gl.UNPACK_SKIP_IMAGES 在从内存读取第一个像素图像之前跳过的像素图像数量。 GLint 0 0 到 Infinity OpenGL ES 3.0

示例

设置像素存储模式会影响 WebGLRenderingContext.readPixels() 操作,以及使用 WebGLRenderingContext.texImage2D()WebGLRenderingContext.texSubImage2D() 方法进行纹理解包。

js
const tex = gl.createTexture();
gl.bindTexture(gl.TEXTURE_2D, tex);
gl.pixelStorei(gl.PACK_ALIGNMENT, 4);

要检查像素数据打包和解包的值,您可以使用 WebGLRenderingContext.getParameter() 查询相同的像素存储参数。

js
gl.getParameter(gl.PACK_ALIGNMENT);
gl.getParameter(gl.UNPACK_ALIGNMENT);

规范

规范
WebGL 规范
# 5.14.3
WebGL 规范
# PIXEL_STORAGE_PARAMETERS
WebGL 2.0 规范
# 3.7.2

浏览器兼容性

另见