Нет, вам не нужно перепривязывать буфер
Привязка ELEMENT_ARRAY_BUFFER является частью текущего состояния массива вершин в качестве ответа, на который вы ссылаетесь, указывает.
Эти строки в вашем примеретакже не имеет значения
In initBuffers
// Clean
gl.bindVertexArray(null);
gl.bindBuffer(gl.ARRAY_BUFFER, null);
gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, null);
Ни одна из этих строк действительно не нужна.Только первая строка имеет какую-либо действительную точку, даже если она не нужна
Эта строка
gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, null);
на самом деле ничего не делает, потому что, как указано выше, состояние ELEMENT_ARRAY_BUFFER
является частью текущего массива вершин, поэтомупросто изменение текущего массива вершин с помощью gl.bindVertexArray
уже изменило эту привязку.
Эта строка
gl.bindBuffer(gl.ELEMENT_BUFFER, null);
на самом деле не имеет смысла, потому что AFAIK почти ни в одной из программ не предполагает, что текущая привязка ARRAY_BUFFER установленани к чему.Они всегда связывают буфер перед работой с ним.Это неплохо, и я уверен, что вы могли бы найти какой-то запутанный способ сделать это важным, но в реальной жизни я не видел его.
Эта линия имеет точку.
gl.bindVertexArray(null);
Обычно буферы вершин устанавливаются отдельно от атрибутов вершин.Если вы создаете один массив вершин для каждой вещи для рисования, и ваш шаблон выглядит следующим образом
// at init time
for each thing I plan to draw
(1) create buffers and fill with positions/normals/texcoords/indices
(2) create/bind vertex array
(3) setup attributes and ELEMENT_ARRAY_BUFFER
Тогда, если вы не привязываете null
после шага 3, шаг 1 в итоге изменит привязку ELEMENT_ARRAY_BUFFER дляранее связанный массив вершин
Другими словами, возможно, эта строка
gl.bindVertexArray(null);
имеет точку.Тем не менее, это спорно.Если вы поменяли местами шаги 1 и 2 и изменили инициализацию на
// at init time
for each thing I plan to draw
(1) create/bind vertex array
(2) create buffers and fill with positions/normals/texcoords/indices
(3) setup attributes
, тогда проблема исчезнет
Те же 3 строки существуют в draw
// Clean
gl.bindVertexArray(null);
gl.bindBuffer(gl.ARRAY_BUFFER, null);
gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, null);
Где они опять не имеют смысла