glEnableVertexAttribArray 修改什么对象的状态?

What object's state does glEnableVertexAttribArray modify?

我想我理解 glEnableVertexAttribArray 的作用——它激活程序的特定属性(如果我错了请纠正我)。

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

glUseProgram(program);
glEnableVertexAttribArray(0);

然后再做:

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

是否启用位置 0 的属性?

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

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

If so, what about in OpenGL ES 2.0, where there are no VAOs?

然后影响全局上下文状态。将成为 VAO 状态的状态集最初只是全局状态。这就是 OpenGL 绑定修改对象模型存在的原因;这样当您添加新对象时,您不必更改旧代码。