Android Graphics Shading Language (AGSL)
Mit Sammlungen den Überblick behalten
Sie können Inhalte basierend auf Ihren Einstellungen speichern und kategorisieren.
Die Android Graphics Shading Language (AGSL) wird ab Android 13 verwendet, um das Verhalten programmierbarer RuntimeShader
-Objekte zu definieren. AGSL verwendet einen Großteil seiner Syntax mit GLSL-Fragment-Shadern, funktioniert jedoch im Grafik-Rendering-System von Android, um sowohl das Painting innerhalb von Canvas
anzupassen als auch View
-Inhalte zu filtern.
Betriebstheorie
AGSL-Effekte sind Teil der größeren Android-Grafikpipeline. Wenn Android einen GPU-beschleunigten Zeichenvorgang ausgibt, wird ein einzelner GPU-Fragment-Shader erstellt, um die erforderliche Arbeit zu erledigen. Dieser Shader enthält in der Regel mehrere Teile.
Beispiele:
- Auswerten, ob ein Pixel innerhalb oder außerhalb der gezeichneten Form (oder auf den Rand, wo es Kantenglättung anwenden könnte) liegt.
- Auswerten, ob ein Pixel innerhalb oder außerhalb des Beschneidungsbereichs liegt (auch hier mit einer möglichen Antialiasing-Logik für Rahmenpixel).
- Logik für den
Shader
im Paint
. Der Shader kann aufgrund von ComposeShader
und anderen unten beschriebenen Funktionen eine Baumstruktur von Objekten sein.
- Ähnliche Logik für
ColorFilter
.
- Code zusammenführen (für bestimmte
BlendMode
-Typen)
- Farbraum-Konvertierungscode im Rahmen des Farbmanagements von Android.
- Wenn das
Paint
eine komplexe Baumstruktur von Objekten in den Feldern Shader
, ColorFilter
oder BlendMode
hat, ist immer noch nur ein einzelner GPU-Fragment-Shader vorhanden. Jeder Knoten in dieser Baumstruktur erstellt eine einzelne Funktion. Der Beschneidungscode und der Geometriecode erstellen jeweils eine Funktion. Mit dem Code zum Zusammenführen können Sie eine Funktion erstellen.
Der gesamte Fragment-Shader ruft dann alle diese Funktionen auf (was auch andere Funktionen aufrufen kann, z.B. im Fall eines Shader-Baums).
Ihr AGSL-Effekt trägt eine oder mehrere Funktionen zum Fragment-Shader der GPU bei.
Grundlegende Syntax
AGSL (und GLSL) sind domainspezifische Sprachen im C-Stil. Typen wie bool
und int
verfolgen ihre C-Äquivalente genau. Es gibt weitere Typen zur Unterstützung von Vektoren und Matrizen, die Domainfunktionen unterstützen.
Qualifizierer können auf Typen für Präzisionshinweise angewendet werden. Dies ist nur für Schattierungssprachen möglich. Steuerstrukturen wie if-else
-Anweisungen funktionieren ähnlich wie in C. Die Sprache unterstützt außerdem switch
-Anweisungen und for
-Schleifen mit Einschränkungen. Einige Kontrollstrukturen erfordern konstante Ausdrücke, die bei der Kompilierung ausgewertet werden können.
AGSL unterstützt Funktionen. Jedes Shader-Programm beginnt mit der Funktion main
.
Benutzerdefinierte Funktionen werden ohne Unterstützung für Rekursionen jeglicher Art unterstützt.
Funktionen verwenden eine „Wertrückgabe“-Aufrufkonvention. An Funktionen übergebene Werte werden beim Aufrufen der Funktion in Parameter kopiert und Ausgaben werden zurückkopiert. Dies wird durch die Qualifizierer in
, out
und inout
bestimmt.
Alle Inhalte und Codebeispiele auf dieser Seite unterliegen den Lizenzen wie im Abschnitt Inhaltslizenz beschrieben. Java und OpenJDK sind Marken oder eingetragene Marken von Oracle und/oder seinen Tochtergesellschaften.
Zuletzt aktualisiert: 2025-07-26 (UTC).
[[["Leicht verständlich","easyToUnderstand","thumb-up"],["Mein Problem wurde gelöst","solvedMyProblem","thumb-up"],["Sonstiges","otherUp","thumb-up"]],[["Benötigte Informationen nicht gefunden","missingTheInformationINeed","thumb-down"],["Zu umständlich/zu viele Schritte","tooComplicatedTooManySteps","thumb-down"],["Nicht mehr aktuell","outOfDate","thumb-down"],["Problem mit der Übersetzung","translationIssue","thumb-down"],["Problem mit Beispielen/Code","samplesCodeIssue","thumb-down"],["Sonstiges","otherDown","thumb-down"]],["Zuletzt aktualisiert: 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."]]