-
Text-Rendering ohne Texturen
- Traditionell erfordert das Rendern von Text, alle Glyphen einer Schriftart in einen Atlas zu rendern, diesen als Textur zu binden und anschließend Dreiecke auf den Bildschirm zu zeichnen, um die Glyphen einzeln zu rendern.
- Es wird eine einfache Methode vorgestellt, um Debug-Meldungen schnell auszugeben.
- Es wird eine Technik beschrieben, mit der sich sämtlicher Text mit einem einzigen Draw Call zeichnen lässt.
-
Schriftarten: texturlose Pixel
- Um die Font-Atlas-Textur zu eliminieren, muss etwas Ähnliches wie ein Font-Atlas innerhalb des Fragment-Shaders gespeichert werden.
- Bitmaps lassen sich mit Integer-Konstanten speichern, wodurch Glyphen gerendert werden können.
- 8-Bit-Integer können als Bitmap verwendet und damit im GLSL-Fragment-Shader auf den Bildschirm gezeichnet werden.
-
Ein einzelner Draw Call
- Mit instanziierten Draw Calls lassen sich sich wiederholende Draw-Befehle vermeiden.
- Für jede Instanz werden Daten verwendet, die einen Positions-Offset und den auszugebenden Text enthalten.
- Nachrichten werden in 4 Zeichen aufgeteilt, in
uint32_t umgewandelt und in der Struktur word_data gespeichert.
-
Vertex-Shader
- Der Vertex-Shader erzeugt drei Ausgaben.
- In
gl_Position werden die Eckpunkte des Dreiecks auf dem Bildschirm platziert.
- Das auszugebende Wort wird an den Fragment-Shader weitergereicht.
- Es werden Texturkoordinaten erzeugt, um die
uv-Koordinaten zu berechnen.
-
Fragment-Shader
- Der Fragment-Shader benötigt drei Informationen, um Text zu rendern.
- Er rendert Glyphen, indem die
uv-Koordinaten auf die richtigen Bits der Glyphen-Bitmap abgebildet werden.
- Ist ein Bit gesetzt, wird mit der Vordergrundfarbe gerendert, andernfalls mit der Hintergrundfarbe.
-
Vollständige Implementierung und Quellcode
- Die Implementierung dieser Technik findet sich im Quellcode des Moduls
le_print_debug_print_text.
- Dieses Modul ermöglicht es, Debug-Meldungen einfach auf dem Bildschirm auszugeben.
1 Kommentare
Hacker-News-Kommentare
snprintfwurde direkt in einen GPU-Puffer ausgegeben