WebGLRenderingContext

Baseline 广泛可用 *

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

* 此特性的某些部分可能存在不同级别的支持。

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

WebGLRenderingContext 接口为 HTML <canvas> 元素的绘图表面提供了 OpenGL ES 2.0 图形渲染上下文的接口。

要获取 WebGL 上下文以进行 2D 和/或 3D 图形渲染,请在 <canvas> 元素上调用 getContext(),并将 "webgl" 作为参数。

js
const canvas = document.getElementById("myCanvas");
const gl = canvas.getContext("webgl");

一旦有了 canvas 的 WebGL 渲染上下文,就可以在其中进行渲染。WebGL 教程提供了更多关于如何开始使用 WebGL 的信息、示例和资源。

如果需要 WebGL 2.0 上下文,请参阅 WebGL2RenderingContext;它提供了对 OpenGL ES 3.0 图形实现的访问。

常量

请参阅 WebGL 常量页面。

WebGL 上下文

以下属性和方法提供有关 WebGL 上下文的通用信息和功能。

WebGLRenderingContext.canvas

HTMLCanvasElement 的只读反向引用。如果未与 <canvas> 元素关联,则可能为 null

WebGLRenderingContext.drawingBufferWidth

当前绘图缓冲的只读宽度。应与与此上下文关联的 canvas 元素的宽度匹配。

WebGLRenderingContext.drawingBufferHeight

当前绘图缓冲的只读高度。应与与此上下文关联的 canvas 元素的高度匹配。

WebGLRenderingContext.getContextAttributes()

返回包含实际上下文参数的 WebGLContextAttributes 对象。如果上下文丢失,则可能返回 null

WebGLRenderingContext.isContextLost()

如果上下文丢失,则返回 true,否则返回 false

WebGLRenderingContext.makeXRCompatible()

确保上下文与用户的 XR 硬件兼容,如有必要,将通过新的配置重新创建上下文。这可用于启动使用标准 2D 呈现的应用程序,然后过渡到以后使用 VR 或 AR 模式。

查看和裁剪

WebGLRenderingContext.scissor()

定义剪裁框。

WebGLRenderingContext.viewport()

设置视口。

状态信息

WebGLRenderingContext.activeTexture()

选择活动的纹理单元。

WebGLRenderingContext.blendColor()

设置源和目标混合因子。

WebGLRenderingContext.blendEquation()

将 RGB 混合方程和 alpha 混合方程都设置为一个方程。

WebGLRenderingContext.blendEquationSeparate()

分别设置 RGB 混合方程和 alpha 混合方程。

WebGLRenderingContext.blendFunc()

定义用于混合像素算术的函数。

WebGLRenderingContext.blendFuncSeparate()

分别定义用于混合 RGB 和 alpha 分量的像素算术的函数。

WebGLRenderingContext.clearColor()

指定清除颜色缓冲区时使用的颜色值。

WebGLRenderingContext.clearDepth()

指定清除深度缓冲区时使用的深度值。

WebGLRenderingContext.clearStencil()

指定清除模板缓冲区时使用的模板值。

WebGLRenderingContext.colorMask()

设置在绘制或渲染到 WebGLFramebuffer 时要启用或禁用的颜色分量。

WebGLRenderingContext.cullFace()

指定是否可以剔除正面和/或背面多边形。

WebGLRenderingContext.depthFunc()

指定一个函数,用于比较传入像素深度与当前深度缓冲区值。

WebGLRenderingContext.depthMask()

设置是否启用或禁用写入深度缓冲区。

WebGLRenderingContext.depthRange()

指定从归一化设备坐标到窗口或视口坐标的深度范围映射。

WebGLRenderingContext.disable()

禁用此上下文的特定 WebGL 功能。

WebGLRenderingContext.enable()

启用此上下文的特定 WebGL 功能。

WebGLRenderingContext.frontFace()

通过设置环绕方向来指定多边形是正面还是背面。

WebGLRenderingContext.getParameter()

返回传递参数名称的值。

WebGLRenderingContext.getError()

返回错误信息。

WebGLRenderingContext.hint()

指定某些行为的提示。这些提示的解释取决于实现。

WebGLRenderingContext.isEnabled()

测试此上下文是否启用了特定的 WebGL 功能。

WebGLRenderingContext.lineWidth()

设置栅格化线的线宽。

WebGLRenderingContext.pixelStorei()

指定像素存储模式。

WebGLRenderingContext.polygonOffset()

指定用于计算深度值的比例因子和单位。

WebGLRenderingContext.sampleCoverage()

指定用于抗锯齿效果的多样本覆盖参数。

WebGLRenderingContext.stencilFunc()

设置模板测试的正面和背面函数以及参考值。

WebGLRenderingContext.stencilFuncSeparate()

分别设置模板测试的正面和/或背面函数以及参考值。

WebGLRenderingContext.stencilMask()

控制模板平面中单个位的正面和背面写入的启用和禁用。

WebGLRenderingContext.stencilMaskSeparate()

控制模板平面中单个位的正面和/或背面写入的启用和禁用。

WebGLRenderingContext.stencilOp()

设置正面和背面模板测试操作。

WebGLRenderingContext.stencilOpSeparate()

设置正面和/或背面模板测试操作。

缓冲区

WebGLRenderingContext.bindBuffer()

WebGLBuffer 对象绑定到给定目标。

WebGLRenderingContext.bufferData()

更新缓冲区数据。

WebGLRenderingContext.bufferSubData()

从传递的偏移量开始更新缓冲区数据。

WebGLRenderingContext.createBuffer()

创建 WebGLBuffer 对象。

WebGLRenderingContext.deleteBuffer()

删除 WebGLBuffer 对象。

WebGLRenderingContext.getBufferParameter()

返回有关缓冲区的信息。

WebGLRenderingContext.isBuffer()

返回一个布尔值,指示传递的缓冲区是否有效。

帧缓冲

WebGLRenderingContext.bindFramebuffer()

WebGLFrameBuffer 对象绑定到给定目标。

WebGLRenderingContext.checkFramebufferStatus()

返回帧缓冲区的状态。

WebGLRenderingContext.createFramebuffer()

创建 WebGLFrameBuffer 对象。

WebGLRenderingContext.deleteFramebuffer()

删除 WebGLFrameBuffer 对象。

WebGLRenderingContext.framebufferRenderbuffer()

WebGLRenderingBuffer 对象附加到 WebGLFrameBuffer 对象。

WebGLRenderingContext.framebufferTexture2D()

将纹理图像附加到 WebGLFrameBuffer 对象。

WebGLRenderingContext.getFramebufferAttachmentParameter()

返回有关帧缓冲区的信息。

WebGLRenderingContext.isFramebuffer()

返回一个布尔值,指示传递的 WebGLFrameBuffer 对象是否有效。

WebGLRenderingContext.readPixels()

WebGLFrameBuffer 读取像素块。

渲染缓冲

WebGLRenderingContext.bindRenderbuffer()

WebGLRenderBuffer 对象绑定到给定目标。

WebGLRenderingContext.createRenderbuffer()

创建 WebGLRenderBuffer 对象。

WebGLRenderingContext.deleteRenderbuffer()

删除 WebGLRenderBuffer 对象。

WebGLRenderingContext.getRenderbufferParameter()

返回有关渲染缓冲区的信息。

WebGLRenderingContext.isRenderbuffer()

返回一个布尔值,指示传递的 WebGLRenderingBuffer 是否有效。

WebGLRenderingContext.renderbufferStorage()

创建渲染缓冲区数据存储。

纹理

WebGLRenderingContext.bindTexture()

WebGLTexture 对象绑定到给定目标。

WebGLRenderingContext.compressedTexImage2D()

以压缩格式指定 2D 纹理图像。

WebGLRenderingContext.compressedTexSubImage2D()

以压缩格式指定 2D 纹理子图像。

WebGLRenderingContext.copyTexImage2D()

复制 2D 纹理图像。

WebGLRenderingContext.copyTexSubImage2D()

复制 2D 纹理子图像。

WebGLRenderingContext.createTexture()

创建 WebGLTexture 对象。

WebGLRenderingContext.deleteTexture()

删除 WebGLTexture 对象。

WebGLRenderingContext.generateMipmap()

WebGLTexture 对象生成一组 mipmap。

WebGLRenderingContext.getTexParameter()

返回有关纹理的信息。

WebGLRenderingContext.isTexture()

返回一个布尔值,指示传递的 WebGLTexture 是否有效。

WebGLRenderingContext.texImage2D()

指定 2D 纹理图像。

WebGLRenderingContext.texSubImage2D()

更新当前 WebGLTexture 的子矩形。

WebGLRenderingContext.texParameterf()

设置纹理参数。

WebGLRenderingContext.texParameteri()

设置纹理参数。

程序和着色器

WebGLRenderingContext.attachShader()

WebGLShader 附加到 WebGLProgram

WebGLRenderingContext.bindAttribLocation()

将通用顶点索引绑定到命名属性变量。

WebGLRenderingContext.compileShader()

编译 WebGLShader

WebGLRenderingContext.createProgram()

创建 WebGLProgram

WebGLRenderingContext.createShader()

创建 WebGLShader

WebGLRenderingContext.deleteProgram()

删除 WebGLProgram

WebGLRenderingContext.deleteShader()

删除 WebGLShader

WebGLRenderingContext.detachShader()

分离 WebGLShader

WebGLRenderingContext.getAttachedShaders()

返回附加到 WebGLProgramWebGLShader 对象列表。

WebGLRenderingContext.getProgramParameter()

返回有关程序的信息。

WebGLRenderingContext.getProgramInfoLog()

返回 WebGLProgram 对象的信息日志。

WebGLRenderingContext.getShaderParameter()

返回有关着色器(shader)的信息。

WebGLRenderingContext.getShaderPrecisionFormat()

返回一个 WebGLShaderPrecisionFormat 对象,描述着色器数字格式的精度。

WebGLRenderingContext.getShaderInfoLog()

返回 WebGLShader 对象的信息日志。

WebGLRenderingContext.getShaderSource()

WebGLShader 的源代码作为字符串返回。

WebGLRenderingContext.isProgram()

返回一个布尔值,指示传递的 WebGLProgram 是否有效。

WebGLRenderingContext.isShader()

返回一个布尔值,指示传递的 WebGLShader 是否有效。

WebGLRenderingContext.linkProgram()

链接传递的 WebGLProgram 对象。

WebGLRenderingContext.shaderSource()

设置 WebGLShader 中的源代码。

WebGLRenderingContext.useProgram()

使用指定的 WebGLProgram 作为当前渲染状态的一部分。

WebGLRenderingContext.validateProgram()

验证 WebGLProgram

统一变量和属性

WebGLRenderingContext.disableVertexAttribArray()

禁用给定位置的顶点属性数组。

WebGLRenderingContext.enableVertexAttribArray()

启用给定位置的顶点属性数组。

WebGLRenderingContext.getActiveAttrib()

返回有关活动属性变量的信息。

WebGLRenderingContext.getActiveUniform()

返回有关活动统一变量的信息。

WebGLRenderingContext.getAttribLocation()

返回属性变量的位置。

WebGLRenderingContext.getUniform()

返回给定位置的统一变量的值。

WebGLRenderingContext.getUniformLocation()

返回统一变量的位置。

WebGLRenderingContext.getVertexAttrib()

返回有关给定位置的顶点属性的信息。

WebGLRenderingContext.getVertexAttribOffset()

返回给定顶点属性的地址。

WebGLRenderingContext.uniform[1234][fi][v]()

为统一变量指定一个值。

WebGLRenderingContext.uniformMatrix[234]fv()

为统一变量指定矩阵值。

WebGLRenderingContext.vertexAttrib[1234]f[v]()

为通用顶点属性指定一个值。

WebGLRenderingContext.vertexAttribPointer()

指定顶点属性数组中顶点属性的数据格式和位置。

绘图缓冲

WebGLRenderingContext.clear()

将指定的缓冲区清除为预设值。

WebGLRenderingContext.drawArrays()

从数组数据渲染图元。

WebGLRenderingContext.drawElements()

从元素数组数据渲染图元。

WebGLRenderingContext.finish()

阻塞执行,直到所有先前调用的命令都完成。

WebGLRenderingContext.flush()

清空不同的缓冲区命令,导致所有命令尽快执行。

颜色空间

WebGLRenderingContext.drawingBufferColorSpace

指定 WebGL 绘图缓冲区的颜色空间。

WebGLRenderingContext.unpackColorSpace

指定导入纹理时要转换到的颜色空间。

使用扩展

这些方法管理 WebGL 扩展。

WebGLRenderingContext.getSupportedExtensions()

返回一个 Array 字符串,其中包含所有支持的 WebGL 扩展。

WebGLRenderingContext.getExtension()

返回一个扩展对象。

规范

规范
WebGL 规范
# 5.14

浏览器兼容性

另见