Android Grafik Gölgeleme Dili (AGSL)
Koleksiyonlar ile düzeninizi koruyun
İçeriği tercihlerinize göre kaydedin ve kategorilere ayırın.
Android Grafik Gölgeleme Dili (AGSL), Android 13 ve sonraki sürümler tarafından programlanabilir RuntimeShader
nesnelerinin davranışını tanımlamak için kullanılır. AGSL, söz diziminin büyük bir kısmını GLSL parça gölgelendiricileriyle paylaşır ancak Android grafik oluşturma sistemi içinde hem Canvas
içinde boyamayı özelleştirmek hem de View
içeriğini filtrelemek için çalışır.
İşlem teorisi
AGSL efektleri, daha büyük Android grafik ardışık düzeninin bir parçasıdır. Android, GPU hızlandırmalı bir çizim işlemi gerçekleştirdiğinde gerekli işi yapmak için tek bir GPU parça gölgelendirmesini derler. Bu gölgelendirici genellikle birkaç parçadan oluşur.
Örneğin, şunları içerebilir:
- Bir pikselin çizilen şeklin içine mi yoksa dışına mı (ya da kenar yumuşatma uygulayabileceği kenarlığa) düşüp düşmediğini değerlendirme.
- Bir pikselin kırpma bölgesinin içine mi yoksa dışına mı düştüğünü değerlendirme (sınır pikseller için olası kenar yumuşatma mantığıyla tekrar).
Paint
bağlantısındaki Shader
mantığı. ComposeShader
ve aşağıda açıklanan diğer özellikler nedeniyle, Gölgelendirici aslında bir nesne ağacı olabilir.
ColorFilter
için benzer mantık.
- Kod uyumlu hale getirme (belirli
BlendMode
türleri için).
- Android'in renk yönetiminin bir parçası olarak renk alanı dönüştürme kodu.
Paint
öğesinin Shader
, ColorFilter
veya BlendMode
alanlarında karmaşık bir nesne ağacı olsa bile yalnızca tek bir GPU parça gölgelendirmesi olur. Bu ağaçtaki her düğüm tek bir işlev oluşturur. Kırpma kodu ve geometri kodunun her biri bir işlev oluşturur. Harmanlanan kod bir işlev oluşturabilir.
Daha sonra, genel parça gölgelendirici, bu işlevlerin tümünü çağırır (bu işlevler diğer işlevleri, örneğin, gölgelendirici ağacında çağırabilir).
AGSL efektiniz, GPU'nun parça gölgelendiricisine bir işlev (veya işlev) ekler.
Temel söz dizimi
AGSL (ve GLSL), C stili alana özgü dillerdir. bool
ve int
gibi türler, C eşdeğerlerini yakından izler. Alan işlevselliğini destekleyen vektör ve matrisleri destekleyen ek türler de vardır.
Niteleyiciler, gölgelendirme dillerine özel bir şekilde hassasiyet ipuçları için türlere uygulanabilir. if-else
ifadeleri gibi kontrol yapıları, C'de olduğu gibi çalışır. Dil ayrıca switch
ifadeleri ve for
döngülerini sınırlı olarak destekler. Bazı kontrol yapıları, derleme zamanında değerlendirilebilecek sabit ifadeler gerektirir.
AGSL, işlevleri destekler. Her gölgelendirici programı main
işleviyle başlar.
Kullanıcı tanımlı işlevler, herhangi bir türde yineleme desteği olmadan desteklenir.
İşlevler bir "değer dönüşü" çağırma kuralı kullanır; işlevlere iletilen değerler, işlev çağrıldığında parametrelere kopyalanır ve çıktılar tekrar kopyalanır. Bu, in
, out
ve inout
niteleyicileri tarafından belirlenir.
Bu sayfadaki içerik ve kod örnekleri, İçerik Lisansı sayfasında açıklanan lisanslara tabidir. Java ve OpenJDK, Oracle ve/veya satış ortaklarının tescilli ticari markasıdır.
Son güncelleme tarihi: 2025-07-26 UTC.
[[["Anlaması kolay","easyToUnderstand","thumb-up"],["Sorunumu çözdü","solvedMyProblem","thumb-up"],["Diğer","otherUp","thumb-up"]],[["İhtiyacım olan bilgiler yok","missingTheInformationINeed","thumb-down"],["Çok karmaşık / çok fazla adım var","tooComplicatedTooManySteps","thumb-down"],["Güncel değil","outOfDate","thumb-down"],["Çeviri sorunu","translationIssue","thumb-down"],["Örnek veya kod sorunu","samplesCodeIssue","thumb-down"],["Diğer","otherDown","thumb-down"]],["Son güncelleme tarihi: 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."]]