Мені було цікаво, який стан зберігається в VAGL на OpenGL. Я зрозумів, що VAO містить стан, пов’язаний із специфікаціями вершин буферизованих вершин (які атрибути є у буферах та які буфери пов'язані, ...). Щоб краще зрозуміти правильне використання VAO, я хотів би точно знати, який стан вони мають.
Як я вважаю, слід використовувати VAO
З простих прикладів я зрозумів, що правильне використання VAO полягає в наступному:
Налаштування
Generate VAO
BindVAO
---- Specify vertex attributes
---- Generate VBO's
---- BindVBO's
-------- Buffer vertex data in VBO's
---- Unbind VBO's
Unbind VAO
Візуалізація
Bind VAO
---- Draw
Unbind VAO
З цього я припускаю, що принаймні прив'язки буфера вершин та специфікації атрибутів вершин зберігаються у VAO. Однак я не впевнений, як ця схема використання поширюється на ситуації, коли (кілька) текстур і (кілька) шейдерних програм вступають у гру. Чи зберігається програма активного шейдера у VAO? А чи зберігаються текстури прив'язки текстури (з їх параметрами вибірки / обгортання ) в VAO? Ditto для уніформи ?
Тому мої запитання:
- Який точний стан зберігається у OpenGL VAO ? (Прив'язки VBO, характеристики атрибутів, активна програма шейдера, прив'язка текстури, налаштування вибірки / обгортання текстури, уніформа ...?)
- Як я можу правильно використовувати VAO в більш складних налаштуваннях візуалізації, де (кілька) текстур із відповідними налаштуваннями вибірки / обгортання, (декілька) програм шейдерів та уніформи?