Android Graphics Shading Language (AGSL)
Zadbaj o dobrą organizację dzięki kolekcji
Zapisuj i kategoryzuj treści zgodnie ze swoimi preferencjami.
Android Graphics Shading Language (AGSL) to język używany w Androidzie 13 i nowszych do definiowania zachowania programowalnych obiektów RuntimeShader
. AGSL korzysta w znacznej części z cieniowania fragmentów GLSL, ale działa w systemie renderowania grafiki na Androidzie, aby dostosowywać malowanie w obrębie Canvas
i filtrować treści w View
.
Teoria działania
Efekty AGSL są częścią większego potoku graficznego Androida. Gdy Android wykonuje operację rysowania przyspieszoną z użyciem GPU, montuje pojedynczy cieniowanie fragmentów GPU, aby wykonać wymaganą pracę. Ten program do cieniowania składa się zwykle z kilku części.
Może to obejmować na przykład:
- Określanie, czy piksel wpada na rysowany kształt czy poza niego (lub na obramowanie, gdzie może zostać zastosowany anti-aliasing).
- Sprawdzanie, czy piksel znajduje się wewnątrz czy na zewnątrz obszaru przycinania (ponownie z możliwością antyaliasingu w przypadku pikseli obramowania).
- Logika
Shader
na Paint
. Shader może być w rzeczywistości drzewem obiektów (ze względu na ComposeShader
i inne funkcje opisane poniżej).
- Podobna logika w przypadku elementu
ColorFilter
.
- Kod łączenia (w przypadku niektórych typów
BlendMode
).
- Kod konwersji przestrzeni kolorów w ramach zarządzania kolorami na Androidzie.
- Gdy
Paint
ma złożone drzewo obiektów w polach Shader
, ColorFilter
lub BlendMode
, dostępny jest tylko 1 cieniowanie fragmentów GPU. Każdy węzeł w tym drzewie tworzy jedną funkcję. Kod przycinania i kod geometrii tworzą funkcję. Kod łączenia może utworzyć funkcję.
Ogólny cieniowanie fragmentów wywołuje wszystkie te funkcje (które mogą wywoływać inne funkcje, np. w przypadku drzewa do cieniowania).
Efekt AGSL współtworzy funkcję (lub funkcje) do cieniowania fragmentów GPU.
Podstawowa składnia
AGSL (i GLSL) to języki typowe dla domen w stylu C. Typy takie jak bool
i int
ściśle śledzą swoje odpowiedniki C. Istnieją dodatkowe typy obsługujące wektory i macierze, które obsługują funkcje domeny.
Aby uzyskać wskazówki dotyczące dokładności, kwalifikatory można stosować do typów w sposób charakterystyczny dla języków cieniowania. Struktury kontrolne, takie jak instrukcje if-else
, działają podobnie jak w języku C. Język umożliwia też obsługę instrukcji switch
i pętli for
z ograniczeniami. Niektóre struktury sterujące wymagają wyrażeń stałych, które mogą być oceniane podczas kompilacji.
AGSL obsługuje funkcje, a każdy program do cieniowania zaczyna się od funkcji main
.
Funkcje zdefiniowane przez użytkownika są obsługiwane bez obsługi jakiejkolwiek rekurencji.
Funkcje korzystają ze konwencji wywoływania funkcji „wartość zwracana”. Wartości przekazywane do funkcji są kopiowane do parametrów po jej wywołaniu, a wyniki są kopiowane z powrotem. Zależą one od kwalifikatorów in
, out
i inout
.
Treść strony i umieszczone na niej fragmenty kodu podlegają licencjom opisanym w Licencji na treści. Java i OpenJDK są znakami towarowymi lub zastrzeżonymi znakami towarowymi należącymi do firmy Oracle lub jej podmiotów stowarzyszonych.
Ostatnia aktualizacja: 2025-07-26 UTC.
[[["Łatwo zrozumieć","easyToUnderstand","thumb-up"],["Rozwiązało to mój problem","solvedMyProblem","thumb-up"],["Inne","otherUp","thumb-up"]],[["Brak potrzebnych mi informacji","missingTheInformationINeed","thumb-down"],["Zbyt skomplikowane / zbyt wiele czynności do wykonania","tooComplicatedTooManySteps","thumb-down"],["Nieaktualne treści","outOfDate","thumb-down"],["Problem z tłumaczeniem","translationIssue","thumb-down"],["Problem z przykładami/kodem","samplesCodeIssue","thumb-down"],["Inne","otherDown","thumb-down"]],["Ostatnia aktualizacja: 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."]]