Android Grafik Gölgeleme Dili (AGSL)

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.