查询webGL中的当前顶点属性状态

时间:2016-05-23 20:03:04

标签: webgl

由于某些原因(当它们不可用时模拟VAO),我想获得绑定顶点属性数组的当前状态,并且我获得了我不了解的结果

   VERTEX_ATTRIB_ARRAY_SIZE and VERTEX_ATTRIB_ARRAY_TYPE. 

我尝试了以下程序:

<canvas id='canvas'></canvas>
<script src='/webgl-debug.js'></script>
<script>
  var canvas = document.getElementById('canvas');
  var gl = canvas.getContext('webgl') || canvas.getContext('experimental-webgl');
  gl = WebGLDebugUtils.makeDebugContext(gl); // Remove this in production code

  var buffer = gl.createBuffer();
  gl.bindBuffer(gl.ARRAY_BUFFER, buffer);

  var data = [
   -1.0, -1.0, -1.0,
   -1.0, -1.0,  1.0,
   -1.0,  1.0, -1.0,
   -1.0,  1.0,  1.0,
    1.0, -1.0, -1.0,
    1.0, -1.0,  1.0,
    1.0,  1.0, -1.0,
    1.0,  1.0,  1.0
   ];

  gl.bufferData(gl.ARRAY_BUFFER, data, gl.STATIC_DRAW);
  gl.vertexAttribPointer(0, 1, gl.BYTE, true, 0, 0);

  console.log(gl.getVertexAttrib(0,gl.VERTEX_ATTRIB_ARRAY_SIZE));
  console.log(gl.getVertexAttrib(0,gl.VERTEX_ATTRIB_ARRAY_TYPE) == gl.FLOAT);

</script>

我希望得到:

1 
false

我实际得到的(在Firefox 45.1.1上)是:

4
true

(对应于默认值,而不是我在vertexAttribPointer()中指定的值)

那里有什么我做错了吗?

更新(找到解决方法)

我观察到如果启用了相应的顶点属性数组,那么查询将按预期工作:

  gl.enableVertexAttribArray(0);    
  console.log(gl.getVertexAttrib(0,gl.VERTEX_ATTRIB_ARRAY_SIZE));
  console.log(gl.getVertexAttrib(0,gl.VERTEX_ATTRIB_ARRAY_TYPE) == gl.BYTE);

然后我得到:

1
true

0 个答案:

没有答案