Почему в TWGL два отдельных вызова setBuffersAndAttributes и drawBufferInfo?

В TWGL, почему я должен передать информацию буфера сначала setBuffersAndAttributes, а затем передать его снова drawBufferInfo? Я очень новичок в WebGL и просто пытаюсь понять конвейер, почему эти два отдельных вызова, в каком сценарии я бы сначала установил информацию о буфере, а затем сделал что-то еще, прежде чем рисовать его, или не рисовать его вообще, или рисовать другой информация о буфере?

1 ответ

Решение

почему эти два отдельных вызова, в каком сценарии я бы сначала установил информацию о буфере, а затем сделал бы что-то еще, прежде чем рисовать его, или не рисовать вообще, или рисовать другую информацию о буфере?

Самая распространенная причина - рисовать одно и то же.

twgl.setBuffersAndAttributes(gl, someProgramInfo, someBufferInfo);

// uniforms shared by all instances like projection or view
twgl.setUniforms(...); 

for each instance
  // uniforms unique this instance like material, texture or world matrix
  twgl.setUniforms(...);  
  twgl.drawBufferInfo(...);

Единственное, что делает twgl.drawBufferInfo, это вызывает gl.drawArrays или gl.drawElements и единственная информация, которая ему нужна, это

  1. количество отрисовок зависит от того, сколько вершин нужно обработать
  2. индексируются ли данные (другими словами, должен ли он вызывать gl.drawArrays или gl.drawElements
  3. Если это индекс, то какого типа индексы, UNSIGNED_BYTE, UNSIGNED_SHORT, или UNSIGNED_INT

Его единственная цель - вам не нужно менять код с gl.drawArrays к gl.drawElements или наоборот, если вы измените данные с неиндексированных на индексированные

Другие вопросы по тегам