Рассмотрим следующий пример кода.
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
треугольник отображается, как и ожидалось.Это говорит о том, что с моим кодом шейдера не должно быть ничего плохого.
Чего мне здесь не хватает?