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 glDrawArray
Anruf 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 ls
ist ein einfaches struct
, das die Attributpositionen enthält.
Im Rendering-Teil funktionierte auch das Vertauschen von glBindBuffer
und glBindVertexArrayOES
nicht.
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 glBufferSubData
in Kombination mit einem VAO zu aktualisieren ?