我需要帮助来看看他们之间的权衡.
glDrawElements()需要将索引数据"实时"作为参数.glDrawArrays().有没有办法结合优势?我们也可以缓冲索引数据吗?
如何在顶点着色器中看到它?它可以使用索引并在顶点位置数组中查找吗?
这些信息确实有点难以找到,但也可以glDrawElements与VAO结合使用.然后,索引数据可以(但不必)由a提供ELEMENT_ARRAY_BUFFER.索引像往常一样工作,在顶点着色器中不需要做任何特殊操作.OpenGL确保已经在原始组装期间以正确的方式使用索引.
该规范各国在本节10.3.10:
DrawElements,DrawRangeElements和DrawElementsInstanced从其名称绑定到ELEMENT_- ARRAY_BUFFER的缓冲区对象中获取它们的索引,使用它们的索引参数作为缓冲区对象的偏移量
这基本上意味着,无论何时ELEMENT_ARRAY_BUFFER绑定,indices参数都用作此缓冲区的偏移量(0表示从头开始).当没有绑定这样的缓冲区时,索引指针指定索引数组的地址.