GLSL中的索引是什么?

时间:2018-07-28 03:37:07

标签: c++ opengl glsl

我正在阅读learnopengl.com上的OpenGL教程,并感到我对到目前为止所学到的东西有相当扎实的掌握。我唯一遇到的麻烦是GLSL中的索引。到目前为止,我所知道的只是它们是用于在着色器之间,缓冲区与顶点着色器之间传输数据。我想了解以下内容:

  1. 哪些物理设备包含这些索引? (是在RAM上还是在GPU上的内存中?)
  2. 为什么只有16个索引?
  3. 为什么必须先启用它们,然后才能通过glEnableVertexAttribute(n)在程序的客户端上使用它们?

谢谢您抽出宝贵的时间来帮助我!

1 个答案:

答案 0 :(得分:1)

顶点数据存储(或更确切地说是缓冲的-CPU可以处理它,但所有数据都发送到GPU)在GPU内存中。这是一张照片: enter image description here

16是OpenGL将保证的最小属性数。如本教程(在“着色器”部分的开头)和OpenGL documentation中所述,顶点属性的数量受图形硬件的限制。每增加一个顶点属性,GPU就要为每个顶点处理更多的事情。默认情况下,禁用所有顶点属性并要求程序员启用他/她需要的属性,可以使您的代码高效运行。