Почему в 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
и единственная информация, которая ему нужна, это
- количество отрисовок зависит от того, сколько вершин нужно обработать
- индексируются ли данные (другими словами, должен ли он вызывать gl.drawArrays или gl.drawElements
- Если это индекс, то какого типа индексы,
UNSIGNED_BYTE
,UNSIGNED_SHORT
, илиUNSIGNED_INT
Его единственная цель - вам не нужно менять код с gl.drawArrays
к gl.drawElements
или наоборот, если вы измените данные с неиндексированных на индексированные