Interleaved - Alle Scheitelpunktdaten (Position, Normal, Texkoord ...) werden in 1 Scheitelpunktpuffer getrennt gespeichert. Jedes Scheitelpunktattribut wird in einem separaten Scheitelpunktpuffer gespeichert (1 für Positionen, 1 für Normalen ...).
Ich weiß, dass diese Frage oft gestellt wurde und ich weiß auch, dass es (leider) keine richtige Antwort gibt. Aber ich möchte versuchen, die wichtigsten Vor- und Nachteile von beiden aufzulisten. Oder vielleicht haben Sie einige allgemeine Faustregeln, wann Sie sie verwenden sollen.
Vorteile von Interleaved:
- schneller? (Alle Daten für 1 Scheitelpunkt werden auf einmal abgerufen? etw über den Cache, der besser funktioniert)?
- weniger API-Aufrufe (zum Erstellen und Festlegen von Puffern, aber das ist wahrscheinlich ein sehr kleiner Unterschied)
Vorteile der getrennten:
- Wenn verschiedene Shader unterschiedliche Scheitelpunktattribute benötigen (z. B. ein Shader benötigt nur Position und ein anderer Position, Normal und Texcoord), kann jedem Shader nur die Daten bereitgestellt werden, die er benötigt, und es gibt keine Datenverdoppelung
- Wenn nur die Position von Scheitelpunkten aktualisiert wird, müssen die anderen Attributdaten (z. B. Normalen und Texkoordinaten) nicht erneut gesendet werden.
Wenn Sie weitere Unterschiede feststellen, schreiben Sie bitte. Von oben sieht es im Allgemeinen wie ein Kampf zwischen Speicher und Leistungsoptimierung aus. Aber vielleicht irre ich mich? Vielleicht ist man in den meisten Fällen besser / schlechter?
Bearbeiten: Noch ein Problem - mit verschachtelten Puffern könnte ich unnötige Daten an die GPU senden, und die Datenbandbreite ist ein großer Engpass bei den heutigen Karten. Sollte ich mir darüber Sorgen machen?