2015-12-15 31 views
1

我想我明白glEnableVertexAttribArray的作用 - 它激活程序的特定属性(如果我错了,请纠正我)。glEnableVertexAttribArray修改了什么对象的状态?

我不明白,虽然是哪个对象存储这些信息。它是程序对象吗?也就是说,如果我做的:

glUseProgram(program); 
glEnableVertexAttribArray(0); 

再后来就做:

glUseProgram(program); 
glDrawArray(...); 

将在位置0的属性被启用?

或者它是否正在修改某些全局状态,每次在每次绘制调用之前需要重新设置? 或者它是否修改了VAO的状态?如果是这样,那么在没有VAO的OpenGL ES 2.0中呢?

回答

2

它影响顶点数组对象状态。

如果是这样,那么在没有VAO的OpenGL ES 2.0中呢?

然后它影响全局上下文状态。成为VAO状态的这一组状态最初只是全球状态。这就是OpenGL绑定修改对象模型存在的原因;所以当你添加新的对象时,你不必改变旧的代码。

+1

太好了。谢谢!为了澄清,这意味着(在没有VAO的OpenGL ES 2.0中),每次需要使用一组新的顶点属性进行绘制时,我需要为每个属性调用glVertexAttribPointer()和glEnableVertexAttribArray(),对吧? – user2771609

+0

你有没有想过? – nmr

+0

我想不是。我结束了使用ES 2.0,所以我使用了VAO。 – user2771609