-
Renderizado de texto sin texturas
- Tradicionalmente, para renderizar texto hay que renderizar todos los glifos de una fuente en un atlas, enlazarlo como textura y luego dibujar triángulos en pantalla para renderizar los glifos uno por uno.
- Se presenta un método simple para mostrar rápidamente mensajes de depuración.
- Se explica una técnica que permite dibujar todo el texto con una sola draw call.
-
Fuente: píxeles sin textura
- Para eliminar la textura del atlas de fuentes, es necesario almacenar dentro del fragment shader algo similar a un atlas de fuentes.
- Se pueden usar constantes enteras para almacenar bitmaps, con lo que es posible renderizar glifos.
- Es posible usar enteros de 8 bits como bitmap para dibujarlos en pantalla desde un fragment shader de GLSL.
-
Una sola draw call
- Se pueden usar draw calls instanciadas para evitar comandos de dibujo repetitivos.
- Para cada instancia se usan datos que incluyen el desplazamiento de posición y el texto que se va a mostrar.
- Los mensajes se dividen en bloques de 4 caracteres, se convierten a
uint32_t y se almacenan en la estructura word_data.
-
Vertex shader
- El vertex shader genera tres salidas.
- Coloca los vértices del triángulo en pantalla mediante
gl_Position.
- Pasa al fragment shader la palabra que se va a mostrar.
- Genera coordenadas de textura para calcular las coordenadas
uv.
-
Fragment shader
- El fragment shader necesita tres tipos de información para renderizar el texto.
- Renderiza el glifo mapeando las coordenadas
uv al bit correcto del bitmap del glifo.
- Si el bit está activado, renderiza con el color de primer plano; si no, con el color de fondo.
-
Implementación completa y código fuente
- La implementación de esta técnica puede encontrarse en el código fuente del módulo
le_print_debug_print_text.
- Este módulo permite mostrar fácilmente mensajes de depuración en pantalla.
1 comentarios
Opiniones en Hacker News
snprintfpara escribir directamente en el búfer de la GPU