В OpenGL Wiki: Vertex Specification говорится, что:OpenGL: ВАО/ВБО путаница
Примечание:
GL_ARRAY_BUFFER
связывание НЕ части состояния Вао в! Я знаю, что это сбивает с толку, но так оно и есть.
Ниже приведен пример использования VAO, который, как представляется, работает по назначению. Что здесь не так? Мое понимание OpenGL (или OpenGL Wiki), моего драйвера OpenGL (OSX 10.9) или OpenGL Wiki?
// ------ Pseudo-code ------
// setup
[...]
glBindVertexArray(vertexArrayObjectIdx1);
glBindBuffer(GL_ARRAY_BUFFER, vertexBufferId1);
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, elementBufferId1);
for each vertex attribute
glEnableVertexAttribArray(...);
glVertexAttribPointer(...);
glBindVertexArray(vertexArrayObjectIdx2);
glBindBuffer(GL_ARRAY_BUFFER, vertexBufferId2);
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, elementBufferId2);
for each vertex attribute
glEnableVertexAttribArray(...);
glVertexAttribPointer(...);
// rendering
[...]
glBindVertexArray(vertexArrayObjectIdx1);
glDrawElements(...);
glBindVertexArray(vertexArrayObjectIdx2);
glDrawElements(...);
Существует на самом деле версия 'glVertexAttribPointer (...)' примерно с этой подписью. Но вы должны использовать расширение [Direct State Access] (http://www.opengl.org/registry/specs/EXT/direct_state_access.txt) (которое в основном исключает реализацию Apple, Intel и Mesa и оставляет только AMD и NV). *** *** *** неловко обернуть вокруг вас сначала (в основном из-за имени функции), но этот уродливый беспорядок функции: 'glVertexArrayVertexAttribOffsetEXT (...)' позволит вам установить указатель на Данные VBO хранятся в VAO по определенному индексу без привязки к VBO или VAO. –
Тем не менее, они действительно не могли бы определить 'glVertexAttribPointer (...)' таким образом, потому что эта функция была введена OpenGL с расширением программы ARB Vertex. И ARBVP1 может быть реализован в отсутствие Vertex Buffer Objects (довоенные VBO ARBVP1 на 2-3 года). –
@ AndonM.Coleman не отрицает, что если бы они могли перепроектировать с нуля, они бы ослабили зависимость от глобального состояния так много. –