-
Rendu de texte sans texture
- Traditionnellement, pour rendre du texte, il faut rendre tous les glyphes d’une police dans un atlas, l’attacher comme texture, puis dessiner des triangles à l’écran pour rendre les glyphes un par un.
- Présentation d’une méthode simple pour afficher rapidement des messages de débogage.
- Explication d’une technique permettant de dessiner tout le texte en un seul draw call.
-
Police : des pixels sans texture
- Pour supprimer la texture d’atlas de police, il faut stocker dans le fragment shader quelque chose de similaire à un atlas de police.
- Il est possible de stocker le bitmap à l’aide de constantes entières, ce qui permet de rendre les glyphes.
- Des entiers 8 bits peuvent être utilisés comme bitmap afin d’être dessinés à l’écran dans un fragment shader GLSL.
-
Un seul draw call
- Un draw call instancié permet d’éviter les commandes de dessin répétitives.
- Pour chaque instance, on utilise des données incluant un décalage de position et le texte à afficher.
- Le message est découpé en groupes de 4 caractères, converti en
uint32_t, puis stocké dans la structure word_data.
-
Vertex shader
- Le vertex shader génère trois sorties.
gl_Position place les sommets du triangle à l’écran.
- Le mot à afficher est transmis au fragment shader.
- Des coordonnées de texture sont générées pour calculer les coordonnées
uv.
-
Fragment shader
- Le fragment shader a besoin de trois informations pour rendre le texte.
- Il rend les glyphes en associant les coordonnées
uv au bit correct du bitmap du glyphe.
- Si le bit est activé, le rendu se fait avec la couleur de premier plan ; sinon, avec la couleur d’arrière-plan.
-
Implémentation complète et code source
- L’implémentation de cette technique se trouve dans le code source du module
le_print_debug_print_text.
- Ce module permet d’afficher facilement des messages de débogage à l’écran.
1 commentaires
Avis Hacker News
snprintfpour écrire directement dans le buffer GPU