Lenguaje de sombreado de gráficos (AGSL) de Android
Organiza tus páginas con colecciones
Guarda y categoriza el contenido según tus preferencias.
Android 13 y versiones posteriores usan Android Graphics Shading Language (AGSL) para definir el comportamiento de los objetos RuntimeShader
programables. AGSL comparte gran parte de su sintaxis con sombreadores de fragmentos GLSL, pero funciona dentro del sistema de renderización de gráficos de Android para personalizar la pintura dentro de Canvas
y filtrar el contenido de View
.
Teoría de operación
Los efectos AGSL existen como parte de la canalización de gráficos de Android más grande. Cuando Android emite una operación de dibujo acelerada por GPU, ensambla un solo sombreador de fragmentos de la GPU para realizar el trabajo requerido. Por lo general, este sombreador incluye varios elementos.
Por ejemplo, podría incluir:
- Evaluar si un píxel queda dentro o fuera de la forma que se está dibujando (o en el borde, donde podría aplicar suavizado de contorno).
- Evaluar si un píxel se encuentra dentro o fuera de la región de recorte (nuevamente, con una posible lógica de suavizado de contorno para píxeles de borde).
- Lógica para
Shader
en Paint
En realidad, el sombreador puede ser un árbol de objetos (debido a ComposeShader
y otras funciones que se describen a continuación).
- Lógica similar para
ColorFilter
.
- Código de combinación (para ciertos tipos de
BlendMode
)
- Código de conversión del espacio de color, como parte de la administración de color de Android
- Cuando
Paint
tiene un árbol complejo de objetos en los campos Shader
, ColorFilter
o BlendMode
, solo hay un único sombreador de fragmentos de la GPU. Cada nodo del árbol crea una sola función. El código de recorte y el código de geometría crean una función cada uno. El código de combinación podría crear una función.
Luego, el sombreador de fragmentos general llama a todas estas funciones (que pueden llamar a otras funciones, p.ej., en el caso de un árbol de sombreadores).
Tu efecto AGSL contribuye con una función (o funciones) al sombreador de fragmentos de la GPU.
Sintaxis básica
AGSL (y GLSL) son idiomas específicos del dominio de estilo C. Tipos como bool
y int
rastrean de cerca sus equivalentes de C; hay tipos adicionales para admitir vectores y matrices que admitan la funcionalidad del dominio.
Los calificadores se pueden aplicar a tipos para sugerencias de precisión de una manera exclusiva de los lenguajes de sombreado. Las estructuras de control, como las declaraciones if-else
, funcionan de la misma manera que en C. El lenguaje también proporciona compatibilidad con declaraciones switch
y bucles for
con limitaciones. Algunas estructuras de control requieren expresiones constantes que se pueden evaluar en el tiempo de compilación.
AGSL admite funciones; todos los programas de sombreadores comienzan con la función main
.
Se admiten funciones definidas por el usuario, sin la compatibilidad con recursividad de ningún tipo.
Las funciones usan una convención de llamada de “retorno de valor”. Los valores que se pasan a las funciones se copian en parámetros cuando se llama a estas y se copian los resultados. Esto se determina mediante los calificadores in
, out
y inout
.
El contenido y las muestras de código que aparecen en esta página están sujetas a las licencias que se describen en la Licencia de Contenido. Java y OpenJDK son marcas registradas de Oracle o sus afiliados.
Última actualización: 2025-07-26 (UTC)
[[["Fácil de comprender","easyToUnderstand","thumb-up"],["Resolvió mi problema","solvedMyProblem","thumb-up"],["Otro","otherUp","thumb-up"]],[["Falta la información que necesito","missingTheInformationINeed","thumb-down"],["Muy complicado o demasiados pasos","tooComplicatedTooManySteps","thumb-down"],["Desactualizado","outOfDate","thumb-down"],["Problema de traducción","translationIssue","thumb-down"],["Problema con las muestras o los códigos","samplesCodeIssue","thumb-down"],["Otro","otherDown","thumb-down"]],["Última actualización: 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."]]