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?