Webgl 关于gl.COLOR\u BUFFER\u位变量的混淆

Webgl 关于gl.COLOR\u BUFFER\u位变量的混淆,webgl,Webgl,我目前正在学习Webgl,在下面的示例中,我对gl.COLOR\u BUFFER\u BIT的用法有一个混淆点: const canvas = document.querySelector("#glcanvas"); // Initialize the GL context const gl = canvas.getContext("webgl"); // Only continue if WebGL is available and working if (!gl) {

我目前正在学习Webgl,在下面的示例中,我对gl.COLOR\u BUFFER\u BIT的用法有一个混淆点:

  const canvas = document.querySelector("#glcanvas");
  // Initialize the GL context
  const gl = canvas.getContext("webgl");

  // Only continue if WebGL is available and working
  if (!gl) {
    alert("Unable to initialize WebGL. Your browser or machine may not support it.");
    return;
  }
  // Set clear color to black, fully opaque
  gl.clearColor(0.0, 0.0, 0.0, 1.0);
  gl.clear(gl.COLOR_BUFFER_BIT);
  console.log('1: ', gl.COLOR_BUFFER_BIT);

  // Clear the color buffer with specified clear color
  gl.clearColor(1, 1, 1, 1.0);
  gl.clear(gl.COLOR_BUFFER_BIT);
  console.log('2: ', gl.COLOR_BUFFER_BIT);
我对
gl.clear(gl.COLOR\u BUFFER\u BIT)
的理解是将
gl.COLOR\u BUFFER\u BIT
的值设置为
gl.clearColor()中设置的颜色

因此上面的两个
console.log(gl.COLOR\u BUFFER\u BIT)
应该输出不同的值。但实际输出如下:

1:  16384
2:  16384

那有什么问题吗

COLOR\u BUFFER\u BIT
是一个常量,用于告诉
clear
要清除的缓冲区,还有
DEPTH\u BUFFER\u BIT
STENCIL\u BUFFER\u BIT
,这些值是位掩码,意味着可以通过二进制
对它们进行加密来提供多个“清除目标”,例如,您可以通过调用
gl.clear(gl.color\u buffer\u BIT | gl.depth\u buffer\u BIT)
清除颜色和深度缓冲区。调用
clearColor
设置(只有一个)全局清晰颜色,还有
clearDepth
cleartencil
函数设置各自的全局值


换句话说,
clear
实际上使用先前通过
clear****
方法定义的值清除给定的目标,一旦设置这些值,这些值将一直保持到您设置另一个值。

WebGL当然不是一个简单的API,但位掩码是编程的正常部分。这不是WebGL的难点之一。