dart - WebGL drawElements不绘制任何内容

标签 dart webgl

考虑以下代码示例。

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);

放弃 Canvas ,上下文,着色器等的常规设置,方法drawElements不起作用。屏幕上没有任何显示。

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

我在这里想念什么?

最佳答案

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

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

关于dart - WebGL drawElements不绘制任何内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52918826/

相关文章:

dart - 下拉选择不与Flutter一起显示

flutter - 如何在 CustomScrollView 中设置绘制顺序

sql - int 不是一种类型

forms - 如何在TextFormField中显示输入时间?

javascript - Three.js - 片段着色器基础知识 - 按片段的位置为片段着色

opengl - 有没有办法在与 gl.bindTexture 绑定(bind)后检索纹理的尺寸?

three.js - three.js ShaderLib 中有哪些着色器?

command-line - Dart pub 构建模式不起作用

javascript - WebGL 多个着色器

webgl - 使用 WebGL 渲染全屏四边形