Ich schreibe einen Text-Renderer für eine OpenGL-Anwendung. Größe, Farbe, Schriftart und Anti-Aliasing können zur Laufzeit geändert werden (und so können mehrere Schriftarten gleichzeitig auf dem Bildschirm angezeigt werden). Es gibt zu viele Kombinationen, um jeder Kombination aus String und Attributen eine Textur zuzuordnen. Es wird jedoch immer nur eine kleine Teilmenge der gesamten String-Datenbank auf dem Bildschirm angezeigt.Wie kann ich eine Cache-Textur in OpenGL verwalten?
Dies führt mich in die Möglichkeit, einen Cache für die Zeichenfolgen zu erstellen, die Rahmen für Rahmen gedruckt werden. Es wurde vorgeschrieben, dass ich nur eine Textur für die gesamte Operation verwende, da das Erstellen eines Caches mit vielen Texturen eine Textur-Swapping-Strafe für jede andere aus dem Cache gedruckte Zeichenfolge nach sich ziehen würde.
So habe ich vor mir eine 2048x2048 Textur, in die ich alle Strings platzieren kann, die ich anpassen kann, wie sie von der Anwendung für Caching-Zwecke angefordert werden. Ich habe schnell erkannt, dass es nicht trivial ist, den verfügbaren freien Speicherplatz in einem zweidimensionalen Raum zu verfolgen.
Ich habe Dinge wie Best Fit und Next Fit angeschaut, aber diese scheinen für 1d Räume geeignet zu sein.
Wie kann ich diese Cache-Textur in OpenGL verwalten?
Edit: Ich habe seit dem gelernt, dass dies eine Instanz eines "2d Verpackungsproblems" ist.
Oh, ich hätte das Datum vor der Veröffentlichung überprüfen sollen :) –
Für eine vollständige Implementierung möchten Sie vielleicht libcinder betrachten. –