-
Renderização de texto sem textura
- Tradicionalmente, para renderizar texto, é preciso renderizar todos os glifos da fonte em um atlas, vinculá-lo como textura e depois desenhar triângulos na tela para renderizar cada glifo individualmente.
- É apresentado um método simples para exibir rapidamente mensagens de depuração.
- É explicada uma técnica que permite desenhar todo o texto com uma única draw call.
-
Fonte: pixels sem textura
- Para eliminar a textura de atlas da fonte, é necessário armazenar dentro do fragment shader algo semelhante a um atlas de fonte.
- É possível armazenar bitmaps usando constantes inteiras, o que permite renderizar glifos.
- Inteiros de 8 bits podem ser usados como bitmap para desenhar na tela no fragment shader em GLSL.
-
Uma única draw call
- É possível evitar comandos de desenho repetitivos usando uma instanced draw call.
- Para cada instância, são usados dados que incluem o deslocamento de posição e o texto a ser exibido.
- A mensagem é dividida em 4 caracteres, convertida para
uint32_t e armazenada na estrutura word_data.
-
Vertex shader
- O vertex shader gera três saídas.
- Em
gl_Position, ele posiciona os vértices do triângulo na tela.
- A palavra a ser exibida é passada ao fragment shader.
- Coordenadas de textura são geradas para calcular as coordenadas
uv.
-
Fragment shader
- O fragment shader precisa de três informações para renderizar o texto.
- Ele renderiza os glifos mapeando as coordenadas
uv para o bit correto do bitmap do glifo.
- Se o bit estiver definido, renderiza com a cor de primeiro plano; caso contrário, com a cor de fundo.
-
Implementação completa e código-fonte
- A implementação dessa técnica pode ser encontrada no código-fonte do módulo
le_print_debug_print_text.
- Esse módulo facilita a exibição de mensagens de depuração na tela.
1 comentários
Comentários do Hacker News
snprintfpara escrever diretamente em um buffer da GPU