Ich sehe, dass OpenGL-Versionen 3 und höher die Verwendung von clientseitigem Rendering eliminieren. Der Sofortmodus wurde entfernt und Vertex-Arrays scheinen veraltet zu sein. Wenn ich das richtig verstehe, sind VBOs die Hauptmethode zum Rendern von Vertices.
Während ich die Logik dahinter sehe, alles auf einheitliche Weise zu rendern, haben VBOs keine großen Nachteile gegenüber Vertex-Arrays? Ich dachte, VBOs sollten im Allgemeinen große Puffer sein, die mehr als 1 MB Daten enthalten. Was ist, wenn ich eine Szene mit viel kleinerer Geometrie habe? Ich habe ein Szenendiagramm mit einer großen Anzahl von Knoten, von denen jeder eine eigene Transformation usw. benötigt. Jeder Knoten sollte auch separat gelöscht, zu separat hinzugefügt usw. werden können. Ich habe zuvor Vertex-Arrays verwendet. Meine erste Frage ist also, ob beim Umstieg auf VBOs der Aufwand für meine Szenendiagrammobjekte jetzt höher ist, da für jedes Objekt ein VBO zugewiesen werden muss.
Ein weiteres Problem ist, dass die von mir gerenderte Geometrie sehr dynamisch sein kann. Im schlimmsten Fall kann es vorkommen, dass die gesamte Geometrie für einen bestimmten Zeitraum erneut an jeden Frame gesendet werden muss. Haben VBOs in diesem Anwendungsfall eine schlechtere Leistung als Vertex-Arrays, oder funktionieren VBOs im schlimmsten Fall genauso gut wie Vertex-Arrays, jedoch nicht mehr?
In einem präziseren Format lauten meine Fragen also:
1) Ist die Zuweisung / Freigabe von VBOs mit einem erheblichen Aufwand verbunden (ich meine die bloße Einrichtung eines Puffers)?
2) Wenn ich die Daten von der CPU in jedem Frame aktualisiere, kann dies wesentlich schlimmer sein, als wenn ich Vertex-Arrays verwendet hätte?
Und zum Schluss würde ich gerne wissen:
3) Wenn die Antwort auf eine der obigen Fragen "Ja" lautet, warum sollten andere Rendering-Modi, die Vorteile gegenüber VBOs haben könnten, verworfen werden? Fehlt hier etwas, beispielsweise Techniken, mit denen ich einige dieser potenziellen Allokationskosten usw. abmildern soll?
4) Ändern sich die Antworten auf diese Fragen erheblich, je nachdem, welche OpenGL-Version ich verwende? Wenn ich meinen Code so umgestalte, dass er mit OpenGL 3 oder 4 vorwärtskompatibel ist, indem ich VBOs auf performante Weise verwende, werden dieselben Techniken mit OpenGL 2 wahrscheinlich gut funktionieren, oder ist es wahrscheinlich, dass bestimmte Techniken mit OpenGL 3 viel schneller sind + und andere mit OpenGL 2?
Ich habe diese Frage zum Stapelüberlauf gestellt, aber ich poste sie hier erneut, da mir klar wurde, dass diese Site für meine Frage möglicherweise besser geeignet ist.