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

Are OpenGL indices and locations the same thing for uniforms and vertex attributes?

在 OpenGL 参考页中,some functions are marked as using uniform locations, while other 函数被标记为使用统一索引。这些是一样的吗?

与顶点属性类似,some functions are marked as using vertex attribute indices, while other 函数被标记为使用顶点属性位置。这些是一样的吗?

在第一种情况下,制服的 location 不同于 glGetActiveUniform()index

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

在您的第二个示例中,glGetAttribLocation()glEnableVertexAttribArray() 都引用相同的索引。 GL 有一组通用属性,一般由它们的索引引用,从 0 开始。但是,为了让事情更有趣一点,还有 glGetActiveAttrib() 类似于 glGetActiveUniform()一:在这里,索引仅指活动属性列表(在 0 到您从 glGetProgram( GL_ACTIVE_ATTRIBUTES,...) 减一得到的值的范围内,not 到实际属性 index/location。同样,这个 API 允许您迭代所有存在(和活动)的属性。