A Linguagem de sombreamento gráfico do Android (AGSL) é usada pelo Android 13 e versões mais recentes para
definir o comportamento de objetos
RuntimeShader
programáveis. A AGSL
compartilha grande parte da sintaxe com sombreadores de fragmento da GLSL, mas funciona no
sistema de renderização de gráficos do Android para personalizar a pintura em Canvas
e filtrar o conteúdo de View
.
Teoria da operação
Os efeitos da AGSL existem como parte do pipeline maior de gráficos do Android. Quando o Android emite uma operação de desenho acelerado por GPU, ele monta um único sombreador de fragmento da GPU para fazer o trabalho necessário. Normalmente, esse sombreador inclui várias partes. Por exemplo, isso pode incluir:
- Avaliar se um pixel está dentro ou fora da forma que está sendo desenhada (ou na borda, onde ele pode aplicar a suavização).
- Avaliar se um pixel está dentro ou fora da região de recorte (novamente, com uma possível lógica de anti-aliasing para pixels de borda).
- Lógica para
Shader
naPaint
. O Shader pode ser, na verdade, uma árvore de objetos (devido aoComposeShader
e a outros recursos descritos abaixo). - Lógica semelhante para
ColorFilter
. - Código de combinação (para determinados tipos de
BlendMode
). - Código de conversão do espaço de cores, como parte do gerenciamento de cores do Android.
- Quando o
Paint
tem uma árvore complexa de objetos nos camposShader
,ColorFilter
ouBlendMode
, ainda há apenas um sombreador de fragmentos de GPU. Cada nó dessa árvore cria uma única função. Os códigos de recorte e geometria criam uma função. O código de combinação pode criar uma função. O sombreador de fragmento geral chama todas essas funções, que podem chamar outras funções, como no caso de uma árvore de sombreador.
O efeito da AGSL contribui com uma função (ou funções) para o sombreador de fragmentos da GPU.
Sintaxe básica
AGSL (e GLSL) são linguagens específicas de domínio no estilo C. Tipos como bool
e int
rastreiam de perto os equivalentes em C. Há outros tipos para
oferecer suporte a vetores e matrizes com suporte à funcionalidade de domínio.
Os qualificadores podem ser aplicados a tipos de dicas de precisão de uma maneira exclusiva para linguagens de sombreamento. As estruturas de controle, como instruções if-else
, funcionam de maneira
muito parecida com o que ocorre em C. A linguagem também oferece suporte a instruções switch
e loops for
com limitações. Algumas estruturas de controle exigem expressões constantes que podem ser avaliadas durante a compilação.
A AGSL oferece suporte a funções. Todos os programas de sombreador começam com a função main
.
As funções definidas pelo usuário são aceitas, sem suporte para recursão de qualquer tipo.
As funções usam uma convenção de chamada de "valor-retorno". Os valores transmitidos para as funções são
copiados em parâmetros quando a função é chamada, e as saídas são copiadas
de volta. Isso é determinado pelos qualificadores in
, out
e inout
.