对于制服和顶点属性,OpenGL 索引和位置是否相同?

Lit*_*rum 3 opengl opengl-es opengl-3 opengl-4 opengl-es-2.0

在 OpenGL 参考页中,一些函数被标记为使用统一位置,而其他函数被标记为使用统一索引。这些是同一件事吗?

与顶点属性类似,一些函数被标记为使用顶点属性索引,而其他函数被标记为使用顶点属性位置。这些是一样的吗?

der*_*ass 5

在第一种情况下,所述位置为一个均匀距离不同索引用于glGetActiveUniform()

例如glGetActiveUniform(),索引只是一个介于 0 和您从glGetProgram( GL_ACTIVE_UNIFORMS,...)减一得到的值之间的值。此 API 允许您查询程序的任何资源,并且您可以使用该方法迭代所有活动的制服。统一位置可能不是从 0 开始,也可能根本不连续。

在你的第二个例子,glGetAttribLocation()并且glEnableVertexAttribArray()都指向同一个索引。GL 有一组通用属性,通常由它们的索引引用,从 0 开始。但是,为了让事情更有趣一点,还有一个glGetActiveAttrib()类似于那个glGetActiveUniform():这里,索引只指活动属性列表(范围从 0 到您从glGetProgram( GL_ACTIVE_ATTRIBUTES,...)减一获得的值,而不是实际的属性索引/位置。同样,此 API 允许您迭代所有存在(和活动)的属性。