Прикрепляете ли вы индексные данные к VAO (объектам Vertex Array)? - PullRequest
0 голосов
/ 26 октября 2018

Я понимаю, что с VAO идеально подходит для предоставления всех данных атрибутов, таких как нормали вершин, позиции вершин, цвета вершин, координаты текстуры и т. Д., Но как насчет данных индекса в ситуациях для рисования с drawElements вместо drawArrays?

Пока что я создаю VAO и предоставляю данные выше, но не уверен, как прикрепить данные индексного буфера к VAO (если это даже рекомендуется или возможно)

1 Ответ

0 голосов
/ 26 октября 2018

Нет данных о каком-либо буфере в объекте массива вершин. Объект массива вершин просто собирает информацию о том, как «использовать» данные разных буферов. Он знает такие вещи, как формат данных, тип, смещение шага и имена буферов, но он не «отражает» данные, которые хранятся в объектах буфера.

Имя объекта буфера именованного элемента является состоянием вектора состояния объектов массива вершин.

Это означает, что в объекте 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? Униформа сохраняется в унифицированном блоке по умолчанию, который принадлежит программному объекту.

Униформы сохраняются в унифицированном блоке по умолчанию, который принадлежит программному объекту, никакого отношения к объекту массива вершин не существует.

...