recursal/MDN huggingface dataset:
WebGLRenderingContext.createShader()
====================================

**WebGLRenderingContext.createShader()** 用于创建一个 `WebGLShader` 着色器对象，该对象可以使用 `WebGLRenderingContext.shaderSource()` 和 `WebGLRenderingContext.compileShader()` 方法配置着色器代码。

语法
--
```

WebGLShader gl.createShader(type);
```

### 参数

type

参数为`gl.VERTEX_SHADER` 或 `gl.FRAGMENT_SHADER`两者中的一个。

示例
--

详见 `WebGLShader` 的使用和示例

规范
--

| Specification |
| --- |
| WebGL Specification # 5.14.9 |

浏览器兼容性
------

BCD tables only load in the browser with JavaScript enabled. Enable JavaScript to view data.

其他相关
----

* `WebGLProgram`
* `WebGLShader`
* `WebGLRenderingContext.attachShader()`
* `WebGLRenderingContext.bindAttribLocation()`
* `WebGLRenderingContext.compileShader()`
* `WebGLRenderingContext.createProgram()`
* `WebGLRenderingContext.createShader()`
* `WebGLRenderingContext.deleteProgram()`
* `WebGLRenderingContext.deleteShader()`
* `WebGLRenderingContext.detachShader()`
* `WebGLRenderingContext.getAttachedShaders()` (en-US)
* `WebGLRenderingContext.getProgramParameter()` (en-US)
* `WebGLRenderingContext.getProgramInfoLog()`
* `WebGLRenderingContext.getShaderParameter()`
* `WebGLRenderingContext.getShaderPrecisionFormat()` (en-US)
* `WebGLRenderingContext.getShaderInfoLog()` (en-US)
* `WebGLRenderingContext.getShaderSource()`
* `WebGLRenderingContext.isProgram()`
* `WebGLRenderingContext.isShader()`
* `WebGLRenderingContext.linkProgram()`
* `WebGLRenderingContext.shaderSource()`
* `WebGLRenderingContext.useProgram()`
* `WebGLRenderingContext.validateProgram()`
WebGLRenderingContext.shaderSource()
====================================

WebGL API 中的 **`WebGLRenderingContext.shaderSource()`** 方法用于设置 `WebGLShader` 着色器（顶点着色器及片元着色器）的 GLSL 程序代码。

语法
--
```

void gl.shaderSource(shader, source);
```

### 参数

shader

用于设置程序代码的 `WebGLShader`（着色器对象）。

source

包含 GLSL 程序代码的字符串。

### 返回值

None.

示例
--


```js
var shader = gl.createShader(gl.VERTEX\_SHADER);
gl.shaderSource(shader, originalSource);

var source = gl.getShaderSource(shader);
```

规范
--

| Specification |
| --- |
| WebGL Specification # 5.14.9 |

浏览器兼容性
------

BCD tables only load in the browser with JavaScript enabled. Enable JavaScript to view data.

另见
--

* `WebGLRenderingContext.createShader()`
* `WebGLRenderingContext.isShader()`
* `WebGLRenderingContext.deleteShader()`
* `WebGLRenderingContext.getShaderSource()`
WebGLRenderingContext.createProgram()
=====================================

WebGL API 的 **`WebGLRenderingContext.createProgram()`** 方法用于创建和初始化一个 `WebGLProgram` 对象。

语法
--
```

WebGLProgram gl.createProgram();
```

### 参数

无。

### 返回值

一个 `WebGLProgram` 对象由两个编译过后的 `WebGLShader` 组成 - 顶点着色器和片段着色器（均由 GLSL 语言所写）。这些组合成一个可用的 WebGL 着色器程序。

例子
--

### 创建一个 WebGL 着色器程序


```js
var program = gl.createProgram();

// 添加预先定义好的顶点着色器和片段着色器
gl.attachShader(program, vertexShader);
gl.attachShader(program, fragmentShader);

gl.linkProgram(program);

if (!gl.getProgramParameter(program, gl.LINK\_STATUS)) {
  var info = gl.getProgramInfoLog(program);
  throw "Could not compile WebGL program. \n\n" + info;
}
```


详见 `WebGLShader` 获取更多关于创建上述代码中顶点着色器和片段着色器的信息。

规范
--

| Specification |
| --- |
| WebGL Specification # 5.14.9 |

浏览器兼容性
------

BCD tables only load in the browser with JavaScript enabled. Enable JavaScript to view data.

相关资料
----

* `WebGLRenderingContext.deleteProgram()`
* `WebGLRenderingContext.isProgram()`
* `WebGLRenderingContext.linkProgram()`
* `WebGLRenderingContext.useProgram()`
* `WebGLRenderingContext.validateProgram()`
* `WebGLRenderingContext.getProgramParameter()` (en-US)
* `WebGLRenderingContext.getProgramInfoLog()`
WebGLRenderingContext.useProgram()
==================================

**`WebGLRenderingContext.useProgram()`** 方法将定义好的`WebGLProgram` 对象添加到当前的渲染状态中。

语法
--
```

void gl.useProgram(program);
```

### 参数

program

需要添加的`WebGLProgram`对象

### 返回参数

无。

示例
--


```js
var program = gl.createProgram();

// Attach pre-existing shaders
gl.attachShader(program, vertexShader);
gl.attachShader(program, fragmentShader);

gl.linkProgram(program);
gl.useProgram(program);
```

规范
--

| Specification |
| --- |
| WebGL Specification # 5.14.9 |

浏览器兼容性
------

BCD tables only load in the browser with JavaScript enabled. Enable JavaScript to view data.

相关资料
----

* `WebGLRenderingContext.createProgram()`
* `WebGLRenderingContext.deleteProgram()`
* `WebGLRenderingContext.isProgram()`
* `WebGLRenderingContext.linkProgram()`
* `WebGLRenderingContext.validateProgram()`
* `WebGLRenderingContext.getProgramParameter()` (en-US)
* `WebGLRenderingContext.getProgramInfoLog()`
WebGLRenderingContext.texParameter[fi]()
========================================

WebGL API 的 **`WebGLRenderingContext.texParameter[fi]()`** 方法用于设置纹理参数。

语法
--
```

void gl.texParameterf(GLenum target, GLenum pname, GLfloat param);
void gl.texParameteri(GLenum target, GLenum pname, GLint param);
```

### 参数

target

`GLenum` (en-US) 指定绑定点 (目标)。可能的值：

* `gl.TEXTURE_2D`: 二维纹理。
* `gl.TEXTURE_CUBE_MAP`: 立方体纹理。
* 当使用 WebGL 2 context 时，还可以使用以下值
    + `gl.TEXTURE_3D`: 三维贴图。
    + `gl.TEXTURE_2D_ARRAY`: 二维数组贴图。

`pname` 参数是 `Glenum` (en-US) 指定要设置的纹理参数。`param` 参数是 `GLfloat` (en-US) 或 `GLint` (en-US) 已指定的 `pname`参数的值。

| `pname` | 描述 | `参数` |
| --- | --- | --- |
| Available in WebGL 1 |
| --- |
| `gl.TEXTURE_MAG_FILTER` | 纹理放大滤波器 | `gl.LINEAR` (默认值), `gl.NEAREST`. |
| `gl.TEXTURE_MIN_FILTER` | 纹理缩小滤波器 | `gl.LINEAR`, `gl.NEAREST`,
 `gl.NEAREST_MIPMAP_NEAREST`,
 `gl.LINEAR_MIPMAP_NEAREST`,
 `gl.NEAREST_MIPMAP_LINEAR` (默认值),
 `gl.LINEAR_MIPMAP_LINEAR`.
  |
| `gl.TEXTURE_WRAP_S` | 纹理坐标水平填充 `s` | `gl.REPEAT` (默认值),`gl.CLAMP_TO_EDGE`,
 `gl.MIRRORED_REPEAT`.
  |
| `gl.TEXTURE_WRAP_T` | 纹理坐标垂直填充 `t` | `gl.REPEAT` (默认值),`gl.CLAMP_TO_EDGE`,
 `gl.MIRRORED_REPEAT`.
  |
| 
 Additionally available when using the
 `EXT_texture_filter_anisotropic` (en-US) extension
  |
| `ext.TEXTURE_MAX_ANISOTROPY_EXT` | 纹理最大向异性 | `GLfloat` (en-US) 值。 |
| Additionally available when using a WebGL 2 context |
| `gl.TEXTURE_BASE_LEVEL` | 纹理映射等级 | 任何整型值。 |
| `gl.TEXTURE_COMPARE_FUNC` | 纹理对比函数 | `gl.LEQUAL` (默认值), `gl.GEQUAL`,
 `gl.LESS`, `gl.GREATER`, `gl.EQUAL`,
 `gl.NOTEQUAL`, `gl.ALWAYS`, `gl.NEVER`.
  |
| `gl.TEXTURE_COMPARE_MODE` | 纹理对比模式 | `gl.NONE` (默认值), `gl.COMPARE_REF_TO_TEXTURE`. |
| `gl.TEXTURE_MAX_LEVEL` | 最大纹理映射数组等级 | 任何整型值。 |
| `gl.TEXTURE_MAX_LOD` | 纹理最大细节层次值 | 任何整型值。 |
| `gl.TEXTURE_MIN_LOD` | 纹理最小细节层次值 | 任何浮点型值。 |
| `gl.TEXTURE_WRAP_R` | 纹理坐标`r`包装功能 | `gl.REPEAT` (默认值), `gl.CLAMP_TO_EDGE`,
 `gl.MIRRORED_REPEAT`.
  |

### 返回值

`INVALID_ENUM` target 不是合法的值。

`INVALID_OPRATION` 当前目标上没有绑定纹理对象。

示例
--


```js
gl.texParameterf(gl.TEXTURE\_2D, gl.TEXTURE\_MAG\_FILTER, gl.LINEAR);
gl.texParameteri(
  gl.TEXTURE\_2D,
  gl.TEXTURE\_MIN\_FILTER,
  gl.LINEAR\_MIPMAP\_NEAREST,
);
```

规范
--

| Specification |
| --- |
| WebGL Specification # 5.14.8 |
| WebGL 2.0 Specification # 3.7.6 |

浏览器兼容性
------

### api.WebGLRenderingContext.texParameterf

BCD tables only load in the browser with JavaScript enabled. Enable JavaScript to view data.

### api.WebGLRenderingContext.texParameteri

BCD tables only load in the browser with JavaScript enabled. Enable JavaScript to view data.

另见
--

* `WebGLRenderingContext.getTexParameter()`
* `EXT_texture_filter_anisotropic` (en-US)
WebGLRenderingContext.isEnabled()
=================================

**`WebGLRenderingContext.isEnabled()`** 是 WebGL API 方法之一，用来检测给定的 WebGL 功能项在当前上下文是否可用。

默认的，除了 `gl.DITHER`，所有的功能项都是未启用的。

句法
--
```

void gl.isEnabled(cap);
```

### 参数

`cap`

`GLenum` (en-US) 指定待检测的 WebGL 功能项。可能的值有：

| Constant | Description |
| --- | --- |
| `gl.BLEND` | Blending of the computed fragment color values. See `WebGLRenderingContext.blendFunc()`. |
| `gl.CULL_FACE` | Culling of polygons. See `WebGLRenderingContext.cullFace()`. |
| `gl.DEPTH_TEST` | Depth comparisons and updates to the depth buffer. See `WebGLRenderingContext.depthFunc()`. |
| `gl.DITHER` | Dithering of color components before they get written to the color buffer. |
| `gl.POLYGON_OFFSET_FILL` | Adding an offset to depth values of polygon's fragments. See `WebGLRenderingContext.polygonOffset()`. |
| `gl.SAMPLE_ALPHA_TO_COVERAGE` | Computation of a temporary coverage value determined by the alpha value. |
| `gl.SAMPLE_COVERAGE` | ANDing the fragment's coverage with the temporary coverage value. See `WebGLRenderingContext.sampleCoverage()` (en-US). |
| `gl.SCISSOR_TEST` | Scissor test that discards fragments that are outside of the scissor rectangle. See `WebGLRenderingContext.scissor()`. |
| `gl.STENCIL_TEST` | Stencil testing and updates to the stencil buffer. See `WebGLRenderingContext.stencilFunc()` (en-US). |

当使用 WebGL 2 context 的时候，下列附加的值也是可选用的。

| Constant | Description |
| --- | --- |
| `gl.RASTERIZER_DISCARD` | Primitives are discarded immediately before the rasterization stage, but after the optional transform feedback stage. `gl.clear()` commands are ignored. |

### 返回值

`GLboolean` (en-US) 指示能力项 *cap* 可用 (`true`)，不可用 (`false`)。

示例
--


```js
gl.isEnabled(gl.STENCIL\_TEST);
// false
```


启用或停用给定的能力项，使用 `WebGLRenderingContext.enable()` 方法和 `WebGLRenderingContext.disable()` (en-US) 方法：


```js
gl.enable(gl.STENCIL\_TEST);
gl.disable(gl.STENCIL\_TEST);
```

规范
--

| Specification |
| --- |
| WebGL Specification # 5.14.3 |
| WebGL 2.0 Specification # 3.7.2 |

浏览器兼容性
------

BCD tables only load in the browser with JavaScript enabled. Enable JavaScript to view data.

另见
--

* `WebGLRenderingContext.enable()`
* `WebGLRenderingContext.disable()` (en-US)
WebGLRenderingContext.uniformMatrix[234]fv()
============================================

WebGL API 的 **`WebGLRenderingContext.uniformMatrix[234]fv()`** 方法为 uniform 变量指定了矩阵值。

该方法的 3 个版本（`uniformMatrix2fv()`、`uniformMatrix3fv()` 和 `unifomMatrix4fv()`），分别以二阶、三阶和四阶方阵作为输入值，它们应是分别具有 4、9、16 个浮点数的数组。

语法
--
```

WebGLRenderingContext.uniformMatrix2fv(location, transpose, value);
WebGLRenderingContext.uniformMatrix3fv(location, transpose, value);
WebGLRenderingContext.uniformMatrix4fv(location, transpose, value);
```

### 参数

`location`

`WebGLUniformLocation` 对象包含了要修改的 uniform attribute 位置。位置使用 `getUniformLocation()` (en-US)获得。

`transpose`

`GLboolean` (en-US) 指定是否转置矩阵。必须为 `false`。

`value`

`Float32Array` 型或者是 `GLfloat` 序列值。这些值被假定按列主序（column major order）的方式提供。

### 返回值

`undefined`

示例
--


```js
gl.uniformMatrix2fv(loc, false, [2, 1, 2, 2]);
```

规范
--

| Specification |
| --- |
| WebGL Specification # 5.14.10 |

浏览器兼容性
------

BCD tables only load in the browser with JavaScript enabled. Enable JavaScript to view data.

另见
--

* `WebGLRenderingContext.uniform()`
* `WebGL2RenderingContext.uniformMatrix()` – WebGL 2 versions of these methods.
WebGLRenderingContext.createRenderbuffer()
==========================================

WebGL API 的\*\*`WebGLRenderingContext.createRenderbuffer()`\*\* 方法 创建并初始化一个 `WebGLRenderbuffer` 对象。

语法
--
```

WebGLRenderbuffer gl.createRenderbuffer();
```

### 参数

None.

### 返回值

一个 `WebGLRenderbuffer` 对象可以保存数据，例如一张图片，或者可以渲染操作的源或目标。

例如
--

### 创建一个渲染缓冲区


```js
var canvas = document.getElementById("canvas");
var gl = canvas.getContext("webgl");
var renderBuffer = gl.createRenderBuffer();
```

规范
--

| Specification |
| --- |
| WebGL Specification # 5.14.7 |

浏览器兼容性
------

BCD tables only load in the browser with JavaScript enabled. Enable JavaScript to view data.

另见
--

* `WebGLRenderingContext.bindRenderbuffer()`
* `WebGLRenderingContext.deleteRenderbuffer()`
* `WebGLRenderingContext.isRenderbuffer()` (en-US)
* Other buffers: `WebGLBuffer`, `WebGLFramebuffer`
WebGLRenderingContext.deleteFramebuffer()
=========================================

WebGL API 的 **`WebGLRenderingContext.deleteFramebuffer()`** 方法用来删除给定的`WebGLFramebuffer` 对象。如果帧缓冲区已被删除，则此方法无效。.

语法
--
```

void gl.deleteFramebuffer(framebuffer);
```

### 参数

framebuffer

将要删除的`WebGLFramebuffer` 对象。

### 返回值

None.

示例
--

### 删除一个帧缓冲区


```js
var canvas = document.getElementById("canvas");
var gl = canvas.getContext("webgl");
var framebuffer = gl.createFramebuffer();

// ...

gl.deleteFramebuffer(framebuffer);
```

规范
--

| Specification |
| --- |
| WebGL Specification # 5.14.6 |

浏览器兼容性
------

BCD tables only load in the browser with JavaScript enabled. Enable JavaScript to view data.

另见
--

* `WebGLRenderingContext.bindFramebuffer()`
* `WebGLRenderingContext.createFramebuffer()`
* `WebGLRenderingContext.isFramebuffer()` (en-US)
* Other buffers: `WebGLBuffer`, `WebGLRenderbuffer`
WebGLRenderingContext.clearDepth()
==================================

WebGL API的\*\*`WebGLRenderingContext.clearDepth()`\*\* 方法用于设置深度缓冲区的深度清除值。

这个深度清除值的设定，是为了调用`clear()` 的时候使用，这个值的范围是 0 到 1。

语法
--
```

void gl.clearDepth(depth);
```

### 参数

`depth`

类型：`GLclampf` (en-US)。深度值的设定，是当清除深度缓冲区的时候使用。默认值为 1。

### 返回值

None.

样例
--


```js
gl.clearDepth(0.5);
```


若要获取当前深度清除值，查询`DEPTH_CLEAR_VALUE` 常量。


```js
gl.getParameter(gl.DEPTH\_CLEAR\_VALUE);
// 0.5
```

规范
--

| Specification |
| --- |
| WebGL Specification # 5.14.3 |

浏览器兼容性
------

BCD tables only load in the browser with JavaScript enabled. Enable JavaScript to view data.

另见
--

* `WebGLRenderingContext.clear()`
* `WebGLRenderingContext.clearColor()`
* `WebGLRenderingContext.clearStencil()` (en-US)
WebGLRenderingContext.enable()
==============================

WebGL API 中的\*\*`WebGLRenderingContext.enable()`\*\* 方法，用于对该上下文开启某种特性。

语法
--
```

void gl.enable(cap);参数
```


`cap`

让 WebGL 开启某种特性，可能的值：

| Constant | Description |
| --- | --- |
| `gl.BLEND` | 激活片元的颜色融合计算。参见 `WebGLRenderingContext.blendFunc()`. |
| `gl.CULL_FACE` | 激活多边形正反面剔除。参见`WebGLRenderingContext.cullFace()`. |
| `gl.DEPTH_TEST` | 激活深度比较，并且更新深度缓冲区。参见`WebGLRenderingContext.depthFunc()`. |
| `gl.DITHER` | 激活在写入颜色缓冲区之前，抖动颜色成分。 |
| `gl.POLYGON_OFFSET_FILL` | 激活添加多边形片段的深度值偏移。参见`WebGLRenderingContext.polygonOffset()`. |
| `gl.SAMPLE_ALPHA_TO_COVERAGE` | 激活通过 alpha 值决定的临时覆盖值计算。（抗锯齿） |
| `gl.SAMPLE_COVERAGE` | 激活使用临时覆盖值，位和运算片段的覆盖值。参见 `WebGLRenderingContext.sampleCoverage()` (en-US). |
| `gl.SCISSOR_TEST` | 激活剪裁测试，即丢弃在剪裁矩形范围外的片段。`WebGLRenderingContext.scissor()`. |
| `gl.STENCIL_TEST` | 激活模板测试并且更新模板缓冲区。参见`WebGLRenderingContext.stencilFunc()` (en-US). |

当使用 WebGL 2 context时，可以添加使用下面的值。

| Constant | Description |
| --- | --- |
| `gl.RASTERIZER_DISCARD` | 图元光栅化阶段之前，但在任意的 transform 反馈之后，就立刻被丢弃。`gl.clear() 命令被忽略。` |

### 返回值

None.

样例
--


```js
gl.enable(gl.DITHER);
```


如果要检测可用性，可以使用 `WebGLRenderingContext.isEnabled()` 方法：


```js
gl.isEnabled(gl.DITHER);
// true
```

规范
--

| Specification |
| --- |
| WebGL Specification # 5.14.3 |

浏览器兼容性
------

BCD tables only load in the browser with JavaScript enabled. Enable JavaScript to view data.

另见
--

* `WebGLRenderingContext.disable()` (en-US)
* `WebGLRenderingContext.isEnabled()`
WebGLRenderingContext.drawArrays()
==================================

WebGL API 中的 **`WebGLRenderingContext.drawArrays()`** 方法用于从向量数组中绘制图元。

语法
--
```

void gl.drawArrays(mode, first, count);
```

### 参数

`mode`

`GLenum` (en-US) 类型，指定绘制图元的方式，可能值如下。

* `gl.POINTS`: 绘制一系列点。
* `gl.LINE_STRIP`: 绘制一个线条。即，绘制一系列线段，上一点连接下一点。
* `gl.LINE_LOOP`: 绘制一个线圈。即，绘制一系列线段，上一点连接下一点，并且最后一点与第一个点相连。
* `gl.LINES`: 绘制一系列单独线段。每两个点作为端点，线段之间不连接。
* `gl.TRIANGLE_STRIP`：绘制一个三角带。
* `gl.TRIANGLE_FAN`：绘制一个三角扇。
* `gl.TRIANGLES`: 绘制一系列三角形。每三个点作为顶点。

first

`GLint` (en-US) 类型，指定从哪个点开始绘制。

count

`GLsizei` (en-US) 类型，指定绘制需要使用到多少个点。

### 返回值

无。

### 异常

* 如果 `mode` 不是一个可接受值，将会抛出 `gl.INVALID_ENUM` 异常。
* 如果 `first` 或者 `count` 是负值，会抛出 `gl.INVALID_VALUE` 异常。
* 如果 `gl.CURRENT_PROGRAM` 为 `null`，会抛出 `gl.INVALID_OPERATION` 异常。
示例
--


```js
gl.drawArrays(gl.POINTS, 0, 8);
```

规范
--

| Specification |
| --- |
| WebGL Specification # 5.14.11 |

浏览器兼容性
------

BCD tables only load in the browser with JavaScript enabled. Enable JavaScript to view data.

另见
--

* `WebGLRenderingContext.drawElements()`
* `ext.drawArraysInstancedANGLE()` (en-US)
* `ext.drawElementsInstancedANGLE()` (en-US)
* `ext.vertexAttribDivisorANGLE()` (en-US)
* `WebGL2RenderingContext.drawArraysInstanced()` (en-US)
* `WebGL2RenderingContext.drawElementsInstanced()` (en-US)
* `WebGL2RenderingContext.vertexAttribDivisor()` (en-US)
WebGLRenderingContext.bindBuffer()
==================================

WebGL API 的 **`WebGLRenderingContext.bindBuffer()`** 方法将给定的 `WebGLBuffer` 绑定到目标。

语法
--
```

void gl.bindBuffer(target, buffer);
```

### 参数

target

`GLenum` (en-US) 指定绑定点 (target)。可能的值：

* `gl.ARRAY_BUFFER`: 包含顶点属性的 Buffer，如顶点坐标，纹理坐标数据或顶点颜色数据。
* `gl.ELEMENT_ARRAY_BUFFER`: 用于元素索引的 Buffer。
* 当使用 WebGL 2 context时，可以使用以下值：
    + `gl.COPY_READ_BUFFER`: 从一个 Buffer 对象复制到另一个 Buffer 对象。
    + `gl.COPY_WRITE_BUFFER`: 从一个 Buffer 对象复制到另一个 Buffer 对象。
    + `gl.TRANSFORM_FEEDBACK_BUFFER`: Buffer for transform feedback operations.
    + `gl.UNIFORM_BUFFER`: 用于存储统一块的 Buffer。
    + `gl.PIXEL_PACK_BUFFER`: 用于像素传输操作的 Buffer。
    + `gl.PIXEL_UNPACK_BUFFER`: 用于像素传输操作的 Buffer。

buffer

要绑定的 `WebGLBuffer` 。

### 返回值

无。

### 异常

只有一个目标可以绑定到给定的 `WebGLBuffer` 。尝试将缓冲区绑定到另一个目标将引发 `INVALID_OPERATION` 错误，并且当前的缓冲区绑定将保持不变。

一个被`deleteBuffer`标记为删除的`WebGLBuffer`不可重新被绑定，尝试这样做将生成 `INVALID_OPERATION` 错误，并且当前绑定将保持不变。

示例
--

### 将缓冲区绑定到目标


```js
var canvas = document.getElementById("canvas");
var gl = canvas.getContext("webgl");
var buffer = gl.createBuffer();

gl.bindBuffer(gl.ARRAY\_BUFFER, buffer);
```

### 获取当前绑定

要检查当前的缓冲区绑定，请查询 ARRAY\_BUFFER\_BINDING 和 ELEMENT\_ARRAY\_BUFFER\_BINDING 常量。


```js
gl.getParameter(gl.ARRAY\_BUFFER\_BINDING);
gl.getParameter(gl.ELEMENT\_ARRAY\_BUFFER\_BINDING);
```

规范
--

| Specification |
| --- |
| WebGL Specification # 5.14.5 |
| WebGL 2.0 Specification # 3.7.1 |

浏览器兼容性
------

BCD tables only load in the browser with JavaScript enabled. Enable JavaScript to view data.

另见
--

* `WebGLRenderingContext.createBuffer()`
* `WebGLRenderingContext.deleteBuffer()`
* `WebGLRenderingContext.isBuffer()`
* Other buffers: `WebGLFramebuffer`, `WebGLRenderbuffer`
WebGLRenderingContext.getExtension()
====================================

**`WebGLRenderingContext.getExtension()`** 方法可以启用一个 WebGL 扩展。

语法
--
```

gl.getExtension(name);
```

### 参数

name

以 `String` 形式表示的需要启用的 WebGL 扩展的名称。

### 返回值

一个 WebGL 扩展对象。如果扩展名称（区分大小写）与 `WebGLRenderingContext.getSupportedExtensions` 中的任何结果都不匹配，则只会返回 `null` 。

示例
--

当一个 WebGL 扩展被启用后，就可以使用该扩展提供的方法、属性和常量。


```js
var canvas = document.getElementById("canvas");
gl = canvas.getContext("webgl");

gl.getExtension("WEBGL\_lose\_context").loseContext();
```

WebGL 扩展
--------

WebGL API 的扩展在 WebGL Extension Registry 定义。目前支持的扩展在这里列出

规范
--

| Specification |
| --- |
| WebGL Specification # 5.14.14 |

浏览器兼容性
------

BCD tables only load in the browser with JavaScript enabled. Enable JavaScript to view data.

参阅
--

* `WebGLRenderingContext.getSupportedExtensions()`
* webglreport.com
WebGLRenderingContext.getShaderParameter()
==========================================

**`WebGLRenderingContext.getShaderParameter()`** 返回给定的着色器信息

语法
--
```

any gl.getShaderParameter(shader, pname);
```

### 参数

shader

需要获取信息的着色器对象

pname

指定要查询的信息属性名称，值：

* `gl.DELETE_STATUS`:标示着色器是否被删除，删除（**GL\_TRUE**）未删除（**GL\_FALSE**）.
* `gl.COMPILE_STATUS`: 标示着色器是否编译成功，是（**GL\_TRUE**）不是（**GL\_FALSE**）
* `gl.SHADER_TYPE`: 标示着色器类型，是顶点着色器 (`gl.VERTEX_SHADER`) 还是片段着色器 (`gl.FRAGMENT_SHADER`)

### 返回值

返回对应着色器属性信息

例子
--


```js
gl.getShaderParameter(shader, gl.SHADER\_TYPE);
```

规范
--

| Specification |
| --- |
| WebGL Specification # 5.14.9 |

浏览器兼容性
------

BCD tables only load in the browser with JavaScript enabled. Enable JavaScript to view data.

相关链接
----

* `WebGLRenderingContext.getProgramParameter()` (en-US)
WebGLRenderingContext.depthFunc()
=================================

WebGL API 的 **`WebGLRenderingContext.depthFunc()`** 方法，指定将输入像素深度与当前深度缓冲区值进行比较的函数。

语法
--
```

void gl.depthFunc(func);
```

### 参数

`func`

是一个指定深度比较函数的 `GLenum` (en-US)，它设置像素将被绘制的条件。默认值是 `gl.LESS`。可能的值是：

* `gl.NEVER`（永不通过）
* `gl.LESS`（如果传入值小于深度缓冲值，则通过）
* `gl.EQUAL`（如果传入值等于深度缓冲区值，则通过）
* `gl.LEQUAL`（如果传入值小于或等于深度缓冲区值，则通过）
* `gl.GREATER`（如果传入值大于深度缓冲区值，则通过）
* `gl.NOTEQUAL`（如果传入的值不等于深度缓冲区值，则通过）
* `gl.GEQUAL`（如果传入值大于或等于深度缓冲区值，则通过）
* `gl.ALWAYS`（总是通过）

### 返回值

无。

示例
--

深度测试默认是禁用的。要启用或禁用深度测试，请使用带有参数 `gl.DEPTH_TEST` 的 `enable()` 和 `disable()` (en-US) 方法。


```js
gl.enable(gl.DEPTH\_TEST);
gl.depthFunc(gl.NEVER);
```


要检查当前深度函数，请查询 `DEPTH_FUNC` 常量。


```js
gl.getParameter(gl.DEPTH\_FUNC) === gl.NEVER;
// true
```

规范
--

| Specification |
| --- |
| WebGL Specification # 5.14.3 |

浏览器兼容性
------

BCD tables only load in the browser with JavaScript enabled. Enable JavaScript to view data.

参见
--

* `WebGLRenderingContext.enable()`
WebGLRenderingContext.blendFunc()
=================================

WebGL API 的\*\*`WebGLRenderingContext.blendFunc()`\*\* 方法定义了一个用于混合像素算法的函数。

语法
--
```

void gl.blendFunc(sfactor, dfactor);
```

### 参数

`sfactor`

`GLenum` (en-US) 为源混合因子指定一个乘数。默认值是 `gl.ONE`. 有关可能的值，查看下面。

`dfactor`

`GLenum` (en-US) 为源目标合因子指定一个乘数。默认值是 `gl.ZERO`. 有关可能的值，查看下面。

### 返回值

None.

### 异常

* 如果 `sfactor` 或 `dfactor` 不是列出的可能值一直，则抛出 `gl.INVALID_ENUM` 错误。
* 如果使用恒定的颜色和恒定的 alpha 值作为源和目标因子，则抛出`gl.INVALID_ENUM` 错误。
常量
--

下列常数可用于 `sfactor` 和`dfactor`.

混合颜色的公式可以这样描述：color(RGBA) = (sourceColor \* *sfactor*) + (destinationColor \* *dfactor*). RBGA 值在 0 到 1 之间。

| Constant | Factor | Description |
| --- | --- | --- |
| `gl.ZERO` | 0,0,0,0 | 所有颜色乘 0. |
| `gl.ONE` | 1,1,1,1 | 所有颜色乘 1. |
| `gl.SRC_COLOR` | RS, GS, BS, AS | 将所有颜色乘上源颜色。 |
| `gl.ONE_MINUS_SRC_COLOR` | 1-RS, 1-GS, 1-BS, 1-AS | 每个源颜色所有颜色乘 1 . |
| `gl.DST_COLOR` | RD, GD, BD, AD | 将所有颜色与目标颜色相乘。 |
| `gl.ONE_MINUS_DST_COLOR` | 1-RD, 1-GD, 1-BD, 1-AD | 将所有颜色乘以 1 减去每个目标颜色。 |
| `gl.SRC_ALPHA` | AS, AS, AS, AS | 将所有颜色乘以源 alpha 值。 |
| `gl.ONE_MINUS_SRC_ALPHA` | 1-AS, 1-AS, 1-AS, 1-AS | 将所有颜色乘以 1 减去源 alpha 值。 |
| `gl.DST_ALPHA` | AD, AD, AD, AD | 将所有颜色与目标 alpha 值相乘。 |
| `gl.ONE_MINUS_DST_ALPHA` | 1-AD, 1-AD, 1-AD, 1-AD | 将所有颜色乘以 1 减去目标 alpha 值。 |
| `gl.CONSTANT_COLOR` | RC, GC, BC, AC | 将所有颜色乘以一个常数颜色。 |
| `gl.ONE_MINUS_CONSTANT_COLOR` | 1-RC, 1-GC, 1-BC, 1-AC | 所有颜色乘以 1 减去一个常数颜色。 |
| `gl.CONSTANT_ALPHA` | AC, AC, AC, AC | 将所有颜色乘以一个常数。 |
| `gl.ONE_MINUS_CONSTANT_ALPHA` | 1-AC, 1-AC, 1-AC, 1-AC | 所有颜色乘以 1 减去一个常数。 |
| `gl.SRC_ALPHA_SATURATE` | min(AS, 1 - AD), min(AS, 1 - AD), min(AS, 1 - AD), 1 | 将 RGB 颜色乘以源 alpha 值或 1 减去目标 alpha 值中的较小值。alpha 值乘以 1. |

示例
--

使用混合函数，你首先必须使用参数 `gl.BLEND`来激活`WebGLRenderingContext.enable()` 的混合。


```js
gl.enable(gl.BLEND);
gl.blendFunc(gl.SRC\_COLOR, gl.DST\_COLOR);
```


要获得当前的混合函数，查询`BLEND_SRC_RGB`, `BLEND_SRC_ALPHA`, `BLEND_DST_RGB`, 和`BLEND_DST_ALPHA` 常量中返回混合函数常量。


```js
gl.enable(gl.BLEND);
gl.blendFunc(gl.SRC\_COLOR, gl.DST\_COLOR);
gl.getParameter(gl.BLEND\_SRC\_RGB) == gl.SRC\_COLOR;
// true
```

规范
--

| Specification |
| --- |
| WebGL Specification # 5.14.3 |

浏览器兼容性
------

BCD tables only load in the browser with JavaScript enabled. Enable JavaScript to view data.

另见
--

* `WebGLRenderingContext.blendColor()`
* `WebGLRenderingContext.blendEquation()`