我想我理解glEnableVertexAttribArray的作用 - 它会激活程序的特定属性(如果我错了,请纠正我)。
我不明白的是哪个对象存储了这些信息。它是程序对象吗?也就是说,如果我这样做:
glUseProgram(program);
glEnableVertexAttribArray(0);
然后再做:
glUseProgram(program);
glDrawArray(...);
是否会启用位置0的属性?
或者它是否正在修改一些需要在每次绘制调用之前重置的全局状态? 或者它是在修改VAO的状态?如果是这样,那么在没有VAO的OpenGL ES 2.0中呢?
答案 0 :(得分:2)
它影响顶点数组对象状态。
如果是这样,那么在没有VAO的OpenGL ES 2.0中呢?
然后它会影响全局上下文状态。将成为VAO状态的一组状态最初只是全球状态。这就是OpenGL绑定到修改对象模型存在的原因;因此,当您添加新对象时,您不必更改旧代码。