Нет данных о каком-либо буфере в объекте массива вершин. Объект массива вершин просто собирает информацию о том, как «использовать» данные разных буферов.
Он знает такие вещи, как формат данных, тип, смещение шага и имена буферов, но он не «отражает» данные, которые хранятся в объектах буфера.
Имя объекта буфера именованного элемента является состоянием вектора состояния объектов массива вершин.
Это означает, что в объекте Vertex Array нет данных. Индексы хранятся в буфере элементов, но на имя (целочисленный номер объекта) буфера индексов ссылаются в объекте массива вершин.
GL_ELEMENT_ARRAY_BUFFER
должен быть связан после привязки объекта массива вершин (glBindVertexArray
). Объект GL_ELEMENT_ARRAY_BUFFER
хранится в векторе состояний объектов массива вершин.
Если объект массива вершин не связан и снова связан, то GL_ELEMENT_ARRAY_BUFFER
известен и снова связан. Но если буфер массива элементов явно освобождается, когда объект массива вершин связан, он удаляется из вектора состояния.
См. Спецификация OpenGL ES 3.0.5 - 2.11. Объекты Vertex Array, стр. 44 :
Объект массива вершин создается путем привязки имени, возвращаемого GenVertexArrays
с командой
void BindVertexArray( uint array );
массив - имя объекта массива вершин. Результирующий объект массива вершин представляет собой новый вектор состояний, включающий все состояния и с теми же начальными значениями, перечисленными в таблице 6.2.
BindVertexArray
также может использоваться для привязки существующего объекта массива вершин.
Если связывание выполнено успешно, изменение состояния связанного объекта массива вершин не производится, и любое предыдущее связывание прерывается.
Таблицы 6.2, Состояние объекта Vertex Array
VERTEX_ATTRIB_ARRAY_ENABLED
, VERTEX_ATTRIB_ARRAY_SIZE
, VERTEX_ATTRIB_ARRAY_STRIDE
, VERTEX_ATTRIB_ARRAY_TYPE
, VERTEX_ATTRIB_ARRAY_NORMALIZED
, VERTEX_ATTRIB_ARRAY_INTEGER
, VERTEX_ATTRIB_ARRAY_DIVISOR
, VERTEX_ATTRIB_ARRAY_POINTER
, ELEMENT_ARRAY_BUFFER_BINDING
, VERTEX_ATTRIB_ARRAY_BUFFER_BINDING
.
Мне любопытно, будут ли данные объекта буфера индекса или униформы каким-то образом храниться внутри VAO?
Униформа сохраняется в унифицированном блоке по умолчанию, который принадлежит программному объекту.
Униформы сохраняются в унифицированном блоке по умолчанию, который принадлежит программному объекту, никакого отношения к объекту массива вершин не существует.