Какое состояние объекта изменяет glEnableVertexAttribArray?

Я думаю, что понимаю, что делает glEnableVertexAttribArray - он активирует определенный атрибут программы (пожалуйста, исправьте меня, если я ошибаюсь).

Однако я не понимаю, какой объект хранит эту информацию. Это программный объект? То есть если я сделаю:

glUseProgram(program);
glEnableVertexAttribArray(0);

а потом в дальнейшем делать:

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

будет ли включен атрибут в местоположении 0?

Или это изменяет некое глобальное состояние, которое необходимо сбрасывать каждый раз перед каждым вызовом отрисовки? Или это изменение состояния ВАО? Если да, то как насчет OpenGL ES 2.0, где нет VAO?

Ответы на вопрос(1)

Ваш ответ на вопрос