glVertexAttrib(与glVertexAttribPointer相比)用于什么?

时间:2011-10-10 21:35:38

标签: opengl-es opengl-es-2.0

我理解glVertexAttribPointer将根据指向数组设置顶点属性的值。但是glVertexAttrib是什么?看起来它只是为顶点属性设置了一个(可能是矢量)值,那么当你有多个顶点时会发生什么?所有顶点最终都会看到属性的相同值吗?

1 个答案:

答案 0 :(得分:41)

这主要用于旧的立即模式(glBegin/glEnd),在这里您不使用顶点数组,这是不推荐使用的(并在OpenGL ES 2.0和桌面OpenGL 3+核心中删除)。

但是这个函数仍然可以用于数组(这就是它在现代版本中仍然存在的原因)。假设此调用后的所有顶点对此属性具有相同的值(当然,仅当您未启用此属性的数组时),这是正确的。或者更确切地说,没有启用相应数组的每个使用过的着色器属性都会从单个状态值中获取其值,并且可以使用glVertexAttrib更改此值。

如果你有一个普通的着色器,那么这很有用。颜色属性和位置属性,您有一个具有恒定颜色的对象。因此,通过使用glVertexAttrib,您既不必为每个顶点提交颜色,也不必使用颜色更改为统一的特殊着色器。