Я пишу небольшой графический движок, используя OpenGL (через OpenTK с С#).
Чтобы определить атрибуты вершин, у меня есть класс VertexDeclaration с массивом структур VertexElement, которые сопоставляются с вызовами glEnableVertexAttribArray/glVertexAttribPointer.
Кроме того, для поддержки нескольких вершинных потоков у меня есть специальная структура, содержащая буфер вершин, объявление вершин, смещение вершин и частота экземпляра (например, структура XNA VertexBufferBinding).
В настоящее время всякий раз, когда вызывается вызов рисования, я перебираю все установленные потоки вершин и связывать их вершинные буферы, применять объявления вершин, отключать неиспользуемые атрибуты вершин и рисовать примитивы.
Я хотел бы использовать VAO для кэширования вызовов glEnableVertexAttribArray в них, и всякий раз, когда применяется поток вершин, свяжите VAO и измените привязку буфера массива.
Это правильное использование VAO?