Быстрого вопроса: Я всегда видел VAO сетки позволяет theire вершинных атрибутам массивов внутри «нарисовать» называют таким образом:, где это правильное место для glEnableVertexAttribArray
void draw() {
bindVAO();
glEnableVertexAttribArray(0 ... 3);
glDrawElements(...);
glDisableVertexAttribArray(0 ... 3);
unbindVAO();
}
Я также заметил, что я может сходу опустить вторую половину вниз от отрисовки элементов называют как таковой:
void draw() {
bindVAO();
glEnableVertexAttribArray(0 ... 3);
glDrawElements(...);
}
Точно так же я переместил glEnableVertexAttribArray()
вызовы функции сетки поколения/загрузки, и все, кажется, прекрасно работать.
Мне было интересно, было ли все это законным, и если была причина, почему многие фрагменты кода образца (или другие вещи такого характера) имеют атрибутные массивы, включенные и отключенные рядом с призывом рисования (конечно, это делается каждый цикл кадров/рисования - пустая трата времени).
Причина, по которой вы видите, что в Интернете много плохих примеров. И тогда люди начинают копировать их и создавать еще больше из них. Не обязательно вызывать эти функции до того, как каждый вызов вызова является основной целью использования VAO в первую очередь. –
@ Рето Коради, да, это то, что я понял, XD, предпочитал спрашивать в любом случае. – claudehenry
VAO хранит это состояние, поэтому вы можете использовать VAO со всей настройкой состояния. Или вы можете привязать VAO, а затем постоянно изменять состояние каждый раз, когда вы рисуете, оба правильны, но VAO будет помнить любые сделанные вами изменения (а вы не можете). –