gpt4 book ai didi

OpenGL - glDrawElements 与顶点数组对象

转载 作者:行者123 更新时间:2023-12-02 01:05:34 24 4
gpt4 key购买 nike

我需要帮助来了解它们之间的权衡。

  • 在我看来,glDrawElements() 需要获取“实时”索引数据作为参数。
  • 另一方面,如果我使用 VAO,那么在启动期间我会缓冲数据,驱动程序可能会决定将其放在 GPU 上,然后在渲染期间我仅绑定(bind) VAO 并调用 glDrawArrays()

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

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

最佳答案

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

spec第 10.3.10 节对此进行了说明:

DrawElements, DrawRangeElements, and DrawElementsInstanced source their indices from the buffer object whose name is bound to ELEMENT_- ARRAY_BUFFER, using their indices parameters as offsets into the buffer object

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

关于OpenGL - glDrawElements 与顶点数组对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37985684/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com