OpenGL - glDrawElements与顶点数组对象

时间:2016-06-23 08:08:53

标签: opengl vao

我需要帮助才能看到他们之间的权衡。

  • 我认为glDrawElements()需要获取索引数据" live"作为参数。
  • 另一方面,如果我使用VAO,那么在启动期间我缓冲数据并且驱动程序可能决定将其放在GPU上,然后在渲染期间我只绑定 VAO并调用{{1 }}。

没有办法结合优势吗?我们也可以缓冲索引数据吗?

在顶点着色器中看起来怎么样?它可以使用索引并在顶点位置数组中查找吗?

1 个答案:

答案 0 :(得分:5)

这些信息确实有点难以找到,但也可以将glDrawElements与VAO结合使用。然后,索引数据可以(但不必)由ELEMENT_ARRAY_BUFFER提供。索引像往常一样工作,在顶点着色器中不需要做任何特殊操作。 OpenGL确保已经在原始组装期间以正确的方式使用索引。

spec在第10.3.10节中说明了这一点:

  

DrawElements,DrawRangeElements和DrawElementsInstanced源   来自缓冲区对象的索引,其名称绑定到ELEMENT_-   ARRAY_BUFFER,使用其索引参数作为缓冲区对象的偏移量

这基本上意味着,每当绑定ELEMENT_ARRAY_BUFFER时,indices参数将用作此缓冲区的偏移量(0表示从头开始)。当没有绑定这样的缓冲区时,索引指针指定索引数组的地址。