Normalerweise versuche ich mesh-spezifische Informationen (VBO/VAO) von instanzspezifischen Informationen (Transform, Uniformen, etc.) zu trennen.Wiederverwendung von VBO für Hardware-Instanziierung
Auf diese Weise müssen Teile des Codes, die Instanzinformationen manipulieren, nichts über VBOs/VAOs wissen und umgekehrt.
Allerdings habe ich in letzter Zeit begonnen, Hardware-Instanziierung mit glDrawInstanced zu verwenden, und die Tatsache, dass Instanzattribute im VAO miteinander verbunden sind, erschwert meine Trennung von Problemen.
Der Grund ist, dass in der Regel der VBO/VAO wurde von meinem .OBJ Loader (die alle notwendigen Informationen, um dies zu bauen) und dann andere Teile des Codes nur besorgt über Shader Uniformen konstruiert. Nun müssen diese Teile des Codes über die Struktur des VAO wissen, um die Informationen über ihre Instanzattribute anzuhängen.
Dies wird noch ärgerlicher, wenn ich VBOs habe, die für normales und instanziertes Rendering wiederverwendet werden können.
Gibt es einen empfohlenen Weg, der eine Trennung von Bedenken zwischen dem Festlegen von Netzattributen und Instanzattributen ermöglicht?
Ich dachte an zwei VAOs, eine für normales Rendering und eine andere für instanced Rendering, wo ich die zusätzlichen Instanz Attribute hinzufügen würde, aber ich fand keine Möglichkeit, die ursprünglichen VAO-Daten zu duplizieren oder zu überprüfen, so dass es scheint, dass meine Komponenten müssen die tatsächliche Struktur des VBO/VAO und nicht nur die Instanzparameter kennen.
Erstellen Sie eine weitere Abstraktionsebene über Ihre Geometrie, die Daten in einer bestimmten Art und Weise erstellt und zeichnet (mit oder ohne Instanziierung). – Drop
Ja, genau das wollte ich vermeiden ... Ich werde es letztendlich tun, wenn keine anderen Vorschläge auftauchen. – glopes