由于某些原因(当它们不可用时模拟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