我正在尝试使用 WebGL 中的 ANGLE_instanced_arrays 扩展来渲染具有不同 mat3 转换矩阵的对象的多个实例。这是与我的矩阵的缓冲区相关的代码:
//setup
this.shaderProgram.transformAttribute = gl.getAttribLocation(this.shaderProgram, "transform");
ext.vertexAttribDivisorANGLE(this.shaderProgram.transformAttribute, 1);
this.transformBuffer = gl.createBuffer();
//each render
gl.enableVertexAttribArray(this.shaderProgram.transformAttribute);
gl.bindBuffer(gl.ARRAY_BUFFER, this.transformBuffer);
gl.bufferData(gl.ARRAY_BUFFER, new Float32Array([/*9 floats per instance*/]), gl.STREAM_DRAW);
gl.vertexAttribPointer(this.shaderProgram.transformAttribute, 9, gl.FLOAT, false, 0, 0);
在我的顶点着色器中,我只有'attribute mat3 transform;' 而不是“统一 mat3 变换”。
当我执行上面的代码时,我在 vertexAttribPointer 上收到一个错误:“vertexAttribPointer: bad size or stride”。
如果我将步幅设置为 36(9 * 4 字节浮点数)或 0(自动?),此错误仍然存在。
(顺便说一句,为什么要指定计数、类型和步幅?在什么情况下步幅不只是计数和类型大小的乘积?)