Webgl 关于gl.COLOR\u BUFFER\u位变量的混淆
我目前正在学习Webgl,在下面的示例中,我对gl.COLOR\u BUFFER\u BIT的用法有一个混淆点: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) {
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的难点之一。