--- title: WebGLRenderingContext slug: Web/API/WebGLRenderingContext tags: - WebGL - WebGLRenderingContext translation_of: Web/API/WebGLRenderingContext ---
{{APIRef("WebGL")}}

WebGLRenderingContext 接口提供基于 OpenGL ES 2.0 的绘图上下文,用于在 HTML {{HTMLElement("canvas")}} 元素内绘图。 

要获得这个接口的对象,可以通过在 <canvas> 元素上调用 {{domxref("HTMLCanvasElement.getContext()", "getContext()")}} 函数,调用时传入 “webgl” 参数:

var canvas = document.getElementById('myCanvas');
var gl = canvas.getContext('webgl');

当你获取到 canvas 元素的 WebGL 绘图上下文,你便可以在里面绘图。

点击 WebGL tutorial 获取更多资料,例子,和关于如何开始WebGL编程的知识。

补充:以下内容很多函数都没有提供参数,所以最好还是参见具体API。

常量

请参考 WebGL constants 。

WebGL上下文

以下的属性和方法提供只读的关于上下文的信息:

{{domxref("WebGLRenderingContext.canvas")}}
只读属性,对 {{domxref("HTMLCanvasElement")}} 的向后引用。如果上下文没有相联系的 {{HTMLElement("canvas")}} 元素,值将会为 {{jsxref("null")}}。
{{domxref("WebGLRenderingContext.commit()")}} {{experimental_inline}}

如果上下文没有指定的canvas,把帧交给原始的{{domxref("HTMLCanvasElement")}}元素。

{{domxref("WebGLRenderingContext.drawingBufferWidth")}}
只读属性,当前绘图缓冲区的宽度,等于和该上下文相联系的 canvas 元素的宽度。
{{domxref("WebGLRenderingContext.drawingBufferHeight")}}
只读属性,当前绘图缓冲区的高度,等于和该上下文相联系的 canvas 元素的高度。
{{domxref("WebGLRenderingContext.getContextAttributes()")}}
返回 WebGLContextAttributes 对象,该对象包含真实的上下文参数。如果上下文丢失,将会返回 {{jsxref("null")}}。
{{domxref("WebGLRenderingContext.isContextLost()")}}
如果上下文丢失,返回true;否则,返回 false。

视野和裁剪

{{domxref("WebGLRenderingContext.scissor()")}}
设置裁剪框。
{{domxref("WebGLRenderingContext.viewport()")}}
设置视口。

状态信息

{{domxref("WebGLRenderingContext.activeTexture()")}}
选择要激活的纹理单元。
{{domxref("WebGLRenderingContext.blendColor()")}}
设置源和目标的混和因子。
{{domxref("WebGLRenderingContext.blendEquation()")}}
用同一个表达式设置 RGB 混和表达式和 alpha 混和表达式。
{{domxref("WebGLRenderingContext.blendEquationSeparate()")}}
分开设置 RGB 混和表达式和 alpha 混和表达式。
{{domxref("WebGLRenderingContext.blendFunc()")}}
定义用于像素混合算法的函数。
{{domxref("WebGLRenderingContext.blendFuncSeparate()")}}
分别定义混合像素RGB通道和透明通道的函数。
{{domxref("WebGLRenderingContext.clearColor()")}}
设置用于清空用的颜色。
{{domxref("WebGLRenderingContext.clearDepth()")}}
设置清除深度缓存时的深度值。
{{domxref("WebGLRenderingContext.clearStencil()")}}
设置清除模板缓冲区时的模板值。
{{domxref("WebGLRenderingContext.colorMask()")}}
设置在绘制或渲染{{domxref("WebGLFramebuffer")}}时要开启或关闭的颜色分量。
{{domxref("WebGLRenderingContext.cullFace()")}}
设置多边形的正面和/或反面是否要被排除。
{{domxref("WebGLRenderingContext.depthFunc()")}}
设置比较输入像素深度和深度缓存值得函数。
{{domxref("WebGLRenderingContext.depthMask()")}}
设置是否写入深度缓存。
{{domxref("WebGLRenderingContext.depthRange()")}}
设置从规范化设备坐标映射到窗口或视口坐标时的深度范围。
{{domxref("WebGLRenderingContext.disable()")}}
禁用这个上下文的WebGL功能。
{{domxref("WebGLRenderingContext.enable()")}}
启用这个上下文的WebGL功能。
{{domxref("WebGLRenderingContext.frontFace()")}}
设置多边形的正面使用顺时针还是逆时针绘制表示。
{{domxref("WebGLRenderingContext.getParameter()")}}
返回给入参数名的值。
{{domxref("WebGLRenderingContext.getError()")}}
返回错误信息。
{{domxref("WebGLRenderingContext.hint()")}}
给某些行为设置建议使用的模式。具体建议需要看执行的情况。
{{domxref("WebGLRenderingContext.isEnabled()")}}
测试这个上下文的WebGL功能是否开启。
{{domxref("WebGLRenderingContext.lineWidth()")}}
设置线宽。
{{domxref("WebGLRenderingContext.pixelStorei()")}}
设置像素存储模式。
{{domxref("WebGLRenderingContext.polygonOffset()")}}
设置多边形偏移的比例和单位,从而计算深度值。(补充:解决深度冲突)
{{domxref("WebGLRenderingContext.sampleCoverage()")}}
为抗锯齿效果设置多重取样覆盖参数。
{{domxref("WebGLRenderingContext.stencilFunc()")}}
同时设置前面和背面的模板测试函数,及其引用值。
{{domxref("WebGLRenderingContext.stencilFuncSeparate()")}}
可分开设置前面或背面的模板测试函数,及其引用值。
{{domxref("WebGLRenderingContext.stencilMask()")}}
同时启用或禁用,前面和背面的模板测试掩码。
{{domxref("WebGLRenderingContext.stencilMaskSeparate()")}}
可分开启用或禁用,前面和背面的模板测试掩码。
{{domxref("WebGLRenderingContext.stencilOp()")}}
同时设置,在前面和背面的模板缓冲区上执行的操作。
{{domxref("WebGLRenderingContext.stencilOpSeparate()")}}
可分开设置,在前面和背面的模板缓冲区上执行的操作。

缓冲区

{{domxref("WebGLRenderingContext.bindBuffer()")}}
把 WebGLBuffer 对象绑定到指定目标上。
{{domxref("WebGLRenderingContext.bufferData()")}}
更新缓冲数据。
{{domxref("WebGLRenderingContext.bufferSubData()")}}
更新从给入偏移量开始的缓冲数据。
{{domxref("WebGLRenderingContext.createBuffer()")}}
创建 WebGLBuffer 对象。
{{domxref("WebGLRenderingContext.deleteBuffer()")}}
删除 WebGLBuffer 对象。
{{domxref("WebGLRenderingContext.getBufferParameter()")}}
返回缓冲信息。
{{domxref("WebGLRenderingContext.isBuffer()")}}
返回给入的缓冲是否有效。

帧缓冲区

{{domxref("WebGLRenderingContext.bindFramebuffer()")}}
把 WebGLFrameBuffer 对象绑定到指定对象上。
{{domxref("WebGLRenderingContext.checkFramebufferStatus()")}}
返回帧缓冲区的状态。
{{domxref("WebGLRenderingContext.createFramebuffer()")}}
创建 WebGLFrameBuffer 对象。
{{domxref("WebGLRenderingContext.deleteFramebuffer()")}}
删除 WebGLFrameBuffer 对象。
{{domxref("WebGLRenderingContext.framebufferRenderbuffer()")}}
把 WebGLRenderingBuffer 对象附加到 WebGLFrameBuffer 对象。
{{domxref("WebGLRenderingContext.framebufferTexture2D()")}}
把纹理图像附加到 WebGLFrameBuffer object.
{{domxref("WebGLRenderingContext.getFramebufferAttachmentParameter()")}}
返回帧缓冲区的信息。
{{domxref("WebGLRenderingContext.isFramebuffer()")}}
返回 Boolean 值,表示给入的 WebGLFrameBuffer 对象是否有效。
{{domxref("WebGLRenderingContext.readPixels()")}}
读取 WebGLFrameBuffer 的像素。

渲染缓冲区

{{domxref("WebGLRenderingContext.bindRenderbuffer()")}}
把 WebGLRenderBuffer 对象绑定到指定的对象上。
{{domxref("WebGLRenderingContext.createRenderbuffer()")}}
创建 WebGLRenderBuffer 对象。
{{domxref("WebGLRenderingContext.deleteRenderbuffer()")}}
删除 WebGLRenderBuffer 对象。
{{domxref("WebGLRenderingContext.getRenderbufferParameter()")}}
返回渲染缓冲区的信息。
{{domxref("WebGLRenderingContext.isBuffer()")}}
返回 Boolean 值,表示给入的 WebGLRenderingBuffer 是否有效。
{{domxref("WebGLRenderingContext.renderbufferStorage()")}}
创建渲染缓冲区数据存储。

纹理

{{domxref("WebGLRenderingContext.bindTexture()")}}
把 WebGLTexture 对象绑定到指定对象上。
{{domxref("WebGLRenderingContext.compressedTexImage2D()")}}
指定一个为压缩格式的2D纹理图片。
{{domxref("WebGLRenderingContext.compressedTexSubImage2D()")}}
指定一个为压缩格式的2D纹理子图片。
{{domxref("WebGLRenderingContext.copyTexImage2D()")}}
复制2D纹理图片。
{{domxref("WebGLRenderingContext.copyTexSubImage2D()")}}
复制2D纹理子图片。
{{domxref("WebGLRenderingContext.createTexture()")}}
创建 WebGLTexture 对象。
{{domxref("WebGLRenderingContext.deleteTexture()")}}
删除 WebGLTexture 对象。
{{domxref("WebGLRenderingContext.generateMipmap()")}}
为 WebGLTexture 对象生成一组纹理映射。
{{domxref("WebGLRenderingContext.getTexParameter()")}}
返回纹理信息。
{{domxref("WebGLRenderingContext.isTexture()")}}
返回 Boolean 值,表示给入的 WebGLTexture 是否有效。
{{domxref("WebGLRenderingContext.texImage2D()")}}
指定2D纹理图片。
{{domxref("WebGLRenderingContext.texSubImage2D()")}}
更新当前 WebGLTexture 的子矩形。
{{domxref("WebGLRenderingContext.texParameterf()")}}
设置纹理参数。
{{domxref("WebGLRenderingContext.texParameteri()")}}
设置纹理参数。

程序对象和着色器对象

{{domxref("WebGLRenderingContext.attachShader()")}}
把 WebGLShader 添加到 WebGLProgram。
{{domxref("WebGLRenderingContext.bindAttribLocation()")}}
绑定一个普通顶点索引到一个命名的attribute 变量
{{domxref("WebGLRenderingContext.compileShader()")}}
编译 WebGLShader。
{{domxref("WebGLRenderingContext.createProgram()")}}
创建 WebGLProgram。
{{domxref("WebGLRenderingContext.createShader()")}}
创建 WebGLShader。
{{domxref("WebGLRenderingContext.deleteProgram()")}}
删除 WebGLProgram。
{{domxref("WebGLRenderingContext.deleteShader()")}}
删除 WebGLShader。
{{domxref("WebGLRenderingContext.detachShader()")}}
分离 WebGLShader。
{{domxref("WebGLRenderingContext.getAttachedShaders()")}}
返回附加在 WebGLProgram 上的 WebGLShader 对象的列表。
{{domxref("WebGLRenderingContext.getProgramParameter()")}}
返回程序对象的信息。
{{domxref("WebGLRenderingContext.getProgramInfoLog()")}}
返回 WebGLProgram 对象的信息日志。
{{domxref("WebGLRenderingContext.getShaderParameter()")}}
返回着色器的信息。
{{domxref("WebGLRenderingContext.getShaderPrecisionFormat()")}}
返回一个描述着色器数字类型精度的WebGLShaderPrecisionFormat 对象。
{{domxref("WebGLRenderingContext.getShaderInfoLog()")}}
返回 WebGLShader 对象的信息日志。
{{domxref("WebGLRenderingContext.getShaderSource()")}}
以字符串形式返回 WebGLShader 的源码。
{{domxref("WebGLRenderingContext.isProgram()")}}
返回一个 Boolean 值,表示给入的 WebGLProgram 是否有效。
{{domxref("WebGLRenderingContext.isShader()")}}
返回一个 Boolean 值,表示给入的 WebGLShader 是否有效。
{{domxref("WebGLRenderingContext.linkProgram()")}}
链接给入的 WebGLProgram 对象。
{{domxref("WebGLRenderingContext.shaderSource()")}}
设置一个 WebGLShader 的源码。
{{domxref("WebGLRenderingContext.useProgram()")}}
使用指定的 WebGLProgram 作为当前渲染状态的一部分。
{{domxref("WebGLRenderingContext.validateProgram()")}}
使 WebGLProgram 生效。

Uniform 和 Attribute

{{domxref("WebGLRenderingContext.disableVertexAttribArray()")}}
在给定的位置,禁用顶点attribute数组。
{{domxref("WebGLRenderingContext.enableVertexAttribArray()")}}
在给定的位置,启用顶点attribute数组。
{{domxref("WebGLRenderingContext.getActiveAttrib()")}}
返回激活状态的attribute变量信息。
{{domxref("WebGLRenderingContext.getActiveUniform()")}}
返回激活状态的uniform 变量信息。
{{domxref("WebGLRenderingContext.getAttribLocation()")}}
返回attribute变量的指针位置。
{{domxref("WebGLRenderingContext.getUniform()")}}
返回指定位置的uniform 变量。
{{domxref("WebGLRenderingContext.getUniformLocation()")}}
返回uniform 变量的指针位置。
{{domxref("WebGLRenderingContext.getVertexAttrib()")}}
返回指定位置的顶点attribute变量。
{{domxref("WebGLRenderingContext.getVertexAttribOffset()")}}
获取给定索引的顶点attribute位置。
{{domxref("WebGLRenderingContext.uniform()", "WebGLRenderingContext.uniform[1234][fi][v]()")}}
指定一个uniform变量。
{{domxref("WebGLRenderingContext.uniformMatrix()", "WebGLRenderingContext.uniformMatrix[234]fv()")}}
指定一个uniform矩阵变量。
{{domxref("WebGLRenderingContext.vertexAttrib()", "WebGLRenderingContext.vertexAttrib[1234]f[v]()")}}
指定一个普通顶点attribute的值。
{{domxref("WebGLRenderingContext.vertexAttribPointer()")}}
指定一个顶点attributes 数组中,顶点attributes 变量的数据格式和位置。

绘制缓冲区

{{domxref("WebGLRenderingContext.clear()")}}
把指定的缓冲区清空为预设的值。
{{domxref("WebGLRenderingContext.drawArrays()")}}
渲染数组中的原始数据。
{{domxref("WebGLRenderingContext.drawElements()")}}
渲染元素数组中的原始数据。
{{domxref("WebGLRenderingContext.finish()")}}
阻断执行,直到之前所有的操作都完成。
{{domxref("WebGLRenderingContext.flush()")}}
清空缓冲的命令,这会导致所有命令尽快执行完。

使用扩展插件

这些方法管理 WebGL 扩展:

{{domxref("WebGLRenderingContext.getSupportedExtensions()")}}
返回一个包含 {{domxref("DOMString")}} 的 {{jsxref("Array")}} ,每个元素都为支持的WebGL扩展。
{{domxref("WebGLRenderingContext.getExtension()")}}
返回一个扩展对象。

示例

检测 WebGL 上下文特性支持

{{page("/zh-CN/Learn/WebGL/By_example/Detect_WebGL", "summary")}}

{{page("/zh-CN/Learn/WebGL/By_example/Detect_WebGL", "detect-webgl-source")}}

{{EmbedLiveSample("detect-webgl-source", 660,150 ,"" , "Learn/WebGL/By_example/Detect_WebGL")}}

Canvas 尺寸对使用 WebGL 渲染的影响

{{page("/zh-CN/Learn/WebGL/By_example/Canvas_size_and_WebGL", "canvas-size-and-webgl-intro")}}

{{page("/zh-CN/Learn/WebGL/By_example/Canvas_size_and_WebGL", "canvas-size-and-webgl-source")}}

{{EmbedLiveSample("canvas-size-and-webgl-source", 660,180 ,"" , "Learn/WebGL/By_example/Canvas_size_and_WebGL")}}

规范

Specification Status Comment
{{SpecName('WebGL', "#5.14", "WebGLRenderingContext")}} {{Spec2('WebGL')}} 原始定义

浏览器兼容性

{{Compat("api/WebGLRenderingContext", "WebGLRenderingContext")}}

相关内容