WebGL drawElements不绘制任何东西



请考虑以下代码示例。

Float32List positions = Float32List.fromList([
0.0, 1.0,
-1.0, -1.0,
1.0, -1.0
]);
gl.bindBuffer(WebGL.ARRAY_BUFFER, gl.createBuffer());
gl.bufferData(WebGL.ARRAY_BUFFER, positions, WebGL.STATIC_DRAW);
Uint32List indices = Uint32List.fromList([
0, 1, 2
]);
gl.bindBuffer(WebGL.ELEMENT_ARRAY_BUFFER, gl.createBuffer());
gl.bufferData(WebGL.ELEMENT_ARRAY_BUFFER, indices);
var a_pos = gl.getAttribLocation(shaderProgram, "a_pos");
gl.vertexAttribPointer(a_pos, 3, WebGL.FLOAT, false, 0, 0);
gl.enableVertexAttribArray(a_pos);
gl.clearColor(0.5, 0.5, 0.5, 1.0);
gl.clear(WebGL.COLOR_BUFFER_BIT);
gl.drawElements(WebGL.TRIANGLES, indices.length, WebGL.UNSIGNED_SHORT, 0);

放弃画布、上下文、着色器等的通常设置,该方法drawElements不起作用。屏幕上不显示任何内容。

为了进行健全性检查,我还编写了没有元素数组缓冲区的代码,而是用drawArrays绘制三角形。使用drawArrays时,三角形按预期显示。这告诉我我的着色器代码应该没有问题。

我在这里可能缺少什么?

如果元素数组的类型是Uint32List,则 draw 命令必须使用类型UNSIGNED_INT。请注意,UNSIGNED_SHORT表示 16 位无符号整数的元素数组,UNSIGNED_INT表示 32 位无符号整数的数组。

gl.drawElements(WebGL.TRIANGLES, indices.length, WebGL.UNSIGNED_INT, 0);   

最新更新