In allen Tutorials zu VAOs (Vertex Array Objects) wird gezeigt, wie Sie diese verwenden, indem Sie Vertex-Attribute konfigurieren und ein VBO (Vertex Buffer Object) binden. Ich möchte jedoch ein VAO erstellen, das für eine Reihe von VBOs in Kombination mit einem festen Shader konfiguriert wird, wobei jeder Puffer dasselbe Datenmuster (Scheitelpunkt, UV, Farbe usw.) verwendet. Ich möchte also eine VAO für mehrere VBOs erstellen, die mit einem Shader gezeichnet werden.
Ich konnte keine Demo dazu finden, also habe ich beschlossen, es einfach zu versuchen. Aber es funktioniert nicht und stürzt beim glDrawArrayAnruf ab. Es sieht so aus, als ob der VBO nicht gebunden ist. Hier ist der Code, den ich benutze:
Rendern:
/* 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);
VAO-Erstellung:
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);
Wo lsist ein einfaches struct, das die Attributpositionen enthält.
Im Rendering-Teil funktionierte auch das Vertauschen von glBindBufferund glBindVertexArrayOESnicht.
Die Frage ist also: Ist es überhaupt möglich, oder muss ich für jeden Puffer eine VAO erstellen? Und wenn ich für jeden VBO einen VAO erstellen muss, ist es dann möglich, die Daten des VBO glBufferSubDatain Kombination mit einem VAO zu aktualisieren ?