WebGL drawElements ничего не рисуя - PullRequest
0 голосов
/ 21 октября 2018

Рассмотрим следующий пример кода.

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

Чего мне здесь не хватает?

1 Ответ

0 голосов
/ 21 октября 2018

Если массив элементов имеет тип Uint32List, то команда рисования должна использовать тип UNSIGNED_INT.Обратите внимание: хотя UNSIGNED_SHORT обозначает массив элементов из 16-битных целых чисел без знака, UNSIGNED_INT обозначает массив из 32-битных целых чисел без знака.

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