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ındakiShader
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
öğesininShader
,ColorFilter
veyaBlendMode
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.