Ich versuche, ein Szenendiagramm zu implementieren, und in allen Artikeln, die mir begegnet sind, wird über die Sortierung von Objekten gesprochen. So würden Sie Ihre Objekte beispielsweise nach "Material" sortieren. Bis ich mich hinsetzte und anfing, es zu implementieren, hielt ich das für selbstverständlich, weil es Sinn machte. Aber jetzt frage ich mich, was sich beim Sortieren tatsächlich ändert?
In meiner Engine habe ich einen Manager für UBOs. Ich verwende diese zum Speichern von Daten, die von Programmen gemeinsam genutzt werden. Im Moment sind nur Zeit-, Kamera- und Projektionsmatrizen und Lichter erforderlich (ich mache mir keine Sorgen darüber, welche Lichter sich auswirken welche Objekte ATM).
Jetzt muss ich für jedes Modell das Modell in eine Weltmatrix-Uniform ändern, keine Sortierung wird das ändern. Ist der Sprung von der Änderung dieser Matrix zur Einstellung eines Materials für jedes Objekt so schlecht?
Ich erinnere mich vage daran, irgendwo gelesen zu haben, dass jedes Mal, wenn Sie etwas in der Pipeline ändern, es geleert werden muss und dies zu Leistungsproblemen führen kann. Aber für jeden Zeichnungsaufruf richte ich trotzdem ein Modell für die Weltmatrix ein. Welchen Sinn macht es also, jemals darüber besorgt zu sein?
Übrigens gibt es Informationen darüber, ob das Ändern einer Uniform und das Aufrufen von glBufferSubData mehr (oder weniger) teuer ist.