Ersetzen eines VBO in einem vorhandenen VAO

8

Ich habe ein VAO mit VBOs für verschiedene Vertex-Attribute: Vertex-Positionen, Vertex-Normalen und das Element-Array VBO (alle STATIC_DRAW), so dass das Rendern einer Instanz einfach Folgendes erfordert:

%Vor%

Ich möchte jedoch mehrere Instanzen eines Objekts zeichnen (ich beschränke mich auf das OS X GL 3.2-Kernprofil BTW) mit unterschiedlichen Vertextextur (s, t) -Koordinaten für jede Instanz. Die texcoord VBOs verwenden den STREAM_DRAW-Hinweis (obwohl ich mit DYNAMIC_DRAW davonkommen könnte).

Ist es effizienter, den VAO zu binden, den aktuellen Texcoord VBO zu binden und den Attributzeiger über glVertexAttribPointer zu setzen, den VAO mit glBindVertexArray(0) abzuschließen und die neue Instanz mit anderen Texturkoordinaten zu zeichnen? Oder machen die Kosten für die Aktualisierung eines VAO dies zu einem schlechten Ansatz? Was ist mit der Aktualisierung der Texcoord VBO mit glBufferSubData in einem gebundenen VAO?

Ich würde ein Feedback sehr begrüßen, bevor ich separate Ansätze vergleiche, da die falsche Wahl zu einem erheblichen Refactoring führt.

    
Brett Hale 30.08.2012, 14:21
quelle

1 Antwort

3

Erstellen Sie einfach mehrere VAO. Vertex-Array-Objekte sind leichtgewichtig und dienen zum Einrichten von Vertex-Arrays auf einmal ...

Ein VBO kann an mehrere VAO gebunden sein, was Ihr Leben einfacher und schneller macht.

Wenn Sie zu einem bestimmten Zeitpunkt eine andere Attributkonfiguration wünschen, werfen Sie den alten VAO weg und erstellen Sie einen neuen.

    
Luca 30.08.2012 14:47
quelle

Tags und Links