Sur tous les tutoriels que je peux trouver sur les objets VAO (Vertex Array Objects), ils montrent comment les utiliser en configurant les attributs de vertex et en liant un VBO (Vertex Buffer Object). Mais je veux créer un VAO qui sera configuré pour un ensemble de VBO en combinaison avec un shader fixe, où chaque tampon utilise le même modèle de données (vertex, uv, color, etc.). Donc, je veux créer un VAO pour plusieurs VBO qui seront dessinés en utilisant un shader.
Je n'ai trouvé aucune démo à ce sujet, j'ai donc décidé de l'essayer. Mais cela ne fonctionne pas et se bloque à l' glDrawArray
appel. Il semble que le VBO ne soit pas lié. Voici le code que j'utilise:
Le rendu:
/* Prepare vertex attributes */
glBindVertexArrayOES(vao);
/* Upload the buffer to the GPU */
glBindBuffer(GL_ARRAY_BUFFER, pool->next());
glBufferSubData(GL_ARRAY_BUFFER, 0, parts * buffer.stride() * 6, buffer.getBuffer());
/* Draw the triangles */
glDrawArrays(GL_TRIANGLES, 0, parts * 6);
glBindVertexArrayOES(0);
Création VAO:
glBindVertexArrayOES(vao);
glEnableVertexAttribArray(ls.position);
glVertexAttribPointer(ls.position, 2, GL_FLOAT, GL_FALSE, buffer.stride(), 0);
glEnableVertexAttribArray(ls.color);
glVertexAttribPointer(ls.color, 3, GL_FLOAT, GL_FALSE, buffer.stride(), GL_BUFFER_OFFSET(buffer.dataTypeSize * 2));
glBindVertexArrayOES(0);
Où ls
est un simple struct
qui contient les emplacements des attributs.
Dans la partie Rendu, l'échange de glBindBuffer
et glBindVertexArrayOES
autour n'a pas fonctionné non plus.
Donc, la question est: est-il même possible de le faire, ou devrai-je créer pour chaque tampon un VAO? Et si je dois créer un VAO pour chaque VBO, est-il possible de mettre à jour les données du VBO en utilisant glBufferSubData
en combinaison avec un VAO?