I think I understand what glEnableVertexAttribArray does -- it activates a particular attribute of a program (please correct me if I am wrong).
What I don't understand though is which object stores this information. Is it the program object? That is, if I do:
glUseProgram(program);
glEnableVertexAttribArray(0);
and then later on do:
glUseProgram(program);
glDrawArray(...);
will the attribute at location 0 be enabled?
Or is it modifying some global state which needs to be reset every time before each draw call? Or is it modifying the state of the VAO? If so, what about in OpenGL ES 2.0, where there are no VAOs?
It affects vertex array object state.
If so, what about in OpenGL ES 2.0, where there are no VAOs?
Then it affect global context state. The set of state that would become VAO state was originally just global state. That's why the OpenGL bind-to-modify object model exists; so that when you add new objects, you don't have to change your old code.
来源:https://stackoverflow.com/questions/34278991/what-objects-state-does-glenablevertexattribarray-modify