Linguagem de sombreamento gráfico do Android (AGSL)
Mantenha tudo organizado com as coleções
Salve e categorize o conteúdo com base nas suas preferências.
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
na Paint
. O
Shader pode ser, na verdade, uma árvore de objetos (devido ao
ComposeShader
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 campos Shader
,
ColorFilter
ou BlendMode
, 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
.
O conteúdo e os exemplos de código nesta página estão sujeitos às licenças descritas na Licença de conteúdo. Java e OpenJDK são marcas registradas da Oracle e/ou suas afiliadas.
Última atualização 2025-07-26 UTC.
[[["Fácil de entender","easyToUnderstand","thumb-up"],["Meu problema foi resolvido","solvedMyProblem","thumb-up"],["Outro","otherUp","thumb-up"]],[["Não contém as informações de que eu preciso","missingTheInformationINeed","thumb-down"],["Muito complicado / etapas demais","tooComplicatedTooManySteps","thumb-down"],["Desatualizado","outOfDate","thumb-down"],["Problema na tradução","translationIssue","thumb-down"],["Problema com as amostras / o código","samplesCodeIssue","thumb-down"],["Outro","otherDown","thumb-down"]],["Última atualização 2025-07-26 UTC."],[],[],null,["# Android Graphics Shading Language (AGSL) is used by Android 13 and above to\ndefine the behavior of programmable\n[`RuntimeShader`](/reference/android/graphics/RuntimeShader) objects. AGSL\nshares much of its syntax with GLSL fragment shaders, but works within the\nAndroid graphics rendering system to both customize painting within `Canvas`\nand filter `View` content.\n\nTheory of operation\n-------------------\n\nAGSL effects exist as part of the larger Android graphics pipeline. When Android\nissues a GPU accelerated drawing operation, it assembles a single GPU fragment\nshader to do the required work. This shader typically includes several pieces.\nFor example, it might include:\n\n- Evaluating whether a pixel falls inside or outside of the shape being drawn (or on the border, where it might apply anti-aliasing).\n- Evaluating whether a pixel falls inside or outside of the clipping region (again, with possible anti-aliasing logic for border pixels).\n- Logic for the [`Shader`](/reference/android/graphics/Shader) on the [`Paint`](/reference/android/graphics/Paint). The Shader can actually be a tree of objects (due to [`ComposeShader`](/reference/android/graphics/ComposeShader) and other features described below).\n- Similar logic for the [`ColorFilter`](/reference/android/graphics/ColorFilter).\n- Blending code (for certain types of [`BlendMode`](/reference/android/graphics/BlendMode)).\n- Color space conversion code, as part of Android's color management.\n- When the `Paint` has a complex tree of objects in the `Shader`, `ColorFilter`, or `BlendMode` fields, there is still only a single GPU fragment shader. Each node in that tree creates a single function. The clipping code and geometry code each create a function. The blending code might create a function. The overall fragment shader then calls all of these functions (which may call other functions, e.g. in the case of a shader tree).\n\nYour AGSL effect contributes a function (or functions) to the GPU's fragment shader.\n\nBasic syntax\n------------\n\nAGSL (and GLSL) are C-style domain specific languages. Types such as `bool` and\n`int` closely track their C equivalents; there are additional types to\nsupport vectors and matrices that support domain functionality.\n\nQualifiers can be applied to types for precision hints in a way that's unique to shading languages. Control structures such as `if-else` statements work much\nlike they do in C; the language also provides support for `switch` statements\nand `for` loops with limitations. Some control structures require constant expressions that can be evaluated at compile time.\n\nAGSL supports functions; every shader program begins with the `main` function.\nUser defined functions are supported, without support for recursion of any kind.\nFunctions use a \"value-return\" calling convention; values passed to functions are\ncopied into parameters when the function is called, and outputs are copied\nback; this is determined by the `in`, `out`, and `inout` qualifiers."]]