2016-09-11 6 views
0

Быстрого вопроса: Я всегда видел VAO сетки позволяет theire вершинных атрибутам массивов внутри «нарисовать» называют таким образом:, где это правильное место для glEnableVertexAttribArray

void draw() { 
    bindVAO(); 
    glEnableVertexAttribArray(0 ... 3); 
    glDrawElements(...); 
    glDisableVertexAttribArray(0 ... 3); 
    unbindVAO(); 
} 

Я также заметил, что я может сходу опустить вторую половину вниз от отрисовки элементов называют как таковой:

void draw() { 
    bindVAO(); 
    glEnableVertexAttribArray(0 ... 3); 
    glDrawElements(...); 
} 

Точно так же я переместил glEnableVertexAttribArray() вызовы функции сетки поколения/загрузки, и все, кажется, прекрасно работать.

Мне было интересно, было ли все это законным, и если была причина, почему многие фрагменты кода образца (или другие вещи такого характера) имеют атрибутные массивы, включенные и отключенные рядом с призывом рисования (конечно, это делается каждый цикл кадров/рисования - пустая трата времени).

+1

Причина, по которой вы видите, что в Интернете много плохих примеров. И тогда люди начинают копировать их и создавать еще больше из них. Не обязательно вызывать эти функции до того, как каждый вызов вызова является основной целью использования VAO в первую очередь. –

+0

@ Рето Коради, да, это то, что я понял, XD, предпочитал спрашивать в любом случае. – claudehenry

+0

VAO хранит это состояние, поэтому вы можете использовать VAO со всей настройкой состояния. Или вы можете привязать VAO, а затем постоянно изменять состояние каждый раз, когда вы рисуете, оба правильны, но VAO будет помнить любые сделанные вами изменения (а вы не можете). –

ответ

2

Если вы используете VAO и в одном VAO, не меняйте привязки буфера, а привязка glEnableVertexAttribArray к созданию и обновлению VAO отлично и рекомендуется.

Однако, если VAO не используется или привязки в VAO изменяются динамически, то размещение glEnableVertexAttribArray рядом с кодом привязки (которое обычно происходит на чертеже, тогда) лучше подходит.

+0

круто, что подтверждает то, что я думал, спасибо за ваш ответ – claudehenry