Surface Cache

Dokumentation In einer frühen Version meiner 3D-Engine wurden die Texturen und Lightmaps im TexturenMapper zusammengeführt, und zwar in der tiefsten und zeitkritischsten Funktion des ganzen Systems. Auf der Jagd nach mehr Performance und höheren Frame-Raten musste ich mir was überlegen, um diese Funktionalität zu vereinfachen und damit schneller zu machen. Die Umsetzung in Assemblercode hat's leider nicht gebracht. Hab' ich versucht, aber jeder aktuelle C-Compiler war schneller /-) Stattdessen wurde kurzerhand ein Surface Cache implementiert, wie er auch seinerzeit für Quake entwickelt wurde (Beschrieben in Michael Abrash's Graphics Programming Black Book).

Eine Surface setzt sich aus der Textur und der aufmodulierten Lightmap zusammen. Die Datenstruktur eines Surface-Objekts ist für den Texturemapper optimiert (RGBA statt Paletten-Indizes).

Surface Cache

Für alle Tiles, die sich im Frustum befinden und somit sichtbar sind, werden die Surfaces erzeugt und im Surface Cache abgelegt. Erst dann werden alle Tiles und Surfaces im TexturenMapper projiziert.

Die Surfaces werden anschliessend nicht sofort gelöscht. Sie verbleiben im Cache und können für das nächste Frame wiederverwendet werden!

Sobald eine Tile nicht mehr im Frustum liegt, kann das Surfaceobjekt entfernt werden. So wird Platz geschaffen für die Surfaces von neuen Tiles die durch die Kamerabewegung in das Frustum gelangen.