У меня проблемы с пониманием того, как использовать VAO в OpenGL ES2 (на iOS) и заставить их работать.
Моя текущая настройка рендеринга выглядит так (в псевдокоде):
Инициализация:
foreach VBO:
glGenBuffers();
Рендеринг кадра:
// Render VBO 1
glClear(color | depth);
glBindBuffer(GL_ARRAY_BUFFER, arrayVBO1);
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, indexVBO1);
foreach vertex attribute:
glVertexAttribPointer();
glEnableVertexAttribArray();
glBufferData(GL_ARRAY_BUFFER, ...);
glBufferData(GL_ELEMENT_ARRAY_BUFFER, ...);
glDrawElements(GL_TRIANGLE_STRIP, ...);
// Render VBO 2
glClear(color | depth);
glBindBuffer(GL_ARRAY_BUFFER, arrayVBO2);
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, indexVBO2);
foreach vertex attribute:
glVertexAttribPointer();
glEnableVertexAttribArray();
glBufferData(GL_ARRAY_BUFFER, ...);
glBufferData(GL_ELEMENT_ARRAY_BUFFER, ...);
glDrawElements(GL_TRIANGLE_STRIP, ...);
Это прекрасно работает, однако, оба VBO имеют одинаковую структуру атрибутов чередующихся вершин, и, как вы можете видеть, я настраиваю и включаю каждый атрибут для каждого кадра для каждого VBO. Инструменты жалуются на избыточные вызовы glVertexAttribPointer () и glEnableVertexAttribArray (), но когда я перемещаю один из них или оба в фазу инициализации, я либо получаю EXC_BAD_ACCESS при вызове glDrawElements, либо ничего не рисуется.
У меня вопрос: нужно ли мне делать это каждый кадр, почему это не работает, если я не работаю, и как я буду использовать VAO для решения этой проблемы.