لغة تظليل رسومات Android (AGSL)

يستخدم نظام التشغيل Android 13 والإصدارات الأحدث لغة تظليل رسومات Android (AGSL) لتحديد سلوك عناصر RuntimeShader القابلة للبرمجة. تشارك لغة AGSL الكثير من تركيبتها مع أدوات تظليل أجزاء GLSL، ولكنّها تعمل ضمن نظام عرض رسومات Android لتخصيص الرسم داخل Canvas وفلترة محتوى View.

نظرية العمليات

توجد تأثيرات AGSL كجزء من مسار رسومات Android الأكبر. عندما يُصدر Android عملية رسم مسرَّع لوحدة معالجة الرسومات، فإنه يجمّد جزءًا واحدًا من أجزاء وحدة معالجة الرسومات للقيام بالعمل المطلوب. تتضمن أداة التظليل عادةً عدة قطع. على سبيل المثال، قد يتضمن:

  • تقييم ما إذا كان البكسل يقع داخل الشكل الذي يتم رسمه أو خارجه (أو على الحدود، حيث يمكن تطبيق تنقيح)
  • تقييم ما إذا كان البكسل يقع داخل منطقة الاقتصاص أو خارجها (نكرّر ذلك مع منطق منع التشويش في وحدات البكسل الحدودية)
  • منطق Shader على Paint. ويمكن أن يكون Shader شجرة من الكائنات (بسبب ComposeShader وميزات أخرى موضّحة أدناه).
  • منطق مماثل لـ ColorFilter.
  • الرمز المختلط (لأنواع معيّنة من BlendMode)
  • رمز تحويل مساحة اللون، كجزء من إدارة الألوان على Android
  • إذا كانت السمة Paint تحتوي على مجموعة من العناصر المعقّدة في الحقول Shader أو ColorFilter أو BlendMode، سيظل هناك فاصل واحد فقط من أجزاء وحدة معالجة الرسومات. تنشئ كل عقدة في هذه الشجرة دالة واحدة. تنشئ كل من كود الاقتصاص والتعليمة البرمجية الهندسية دالة. قد تنشئ التعليمة البرمجية للمزج دالة. بعد ذلك، تستدعي أداة تظليل الأجزاء الشاملة جميع هذه الدوال (والتي قد تستدعي دوال أخرى، على سبيل المثال في حالة استخدام شجرة تظليل).

يساهم تأثير AGSL في وظيفة (أو وظائف) في أداة تظليل الأجزاء بوحدة معالجة الرسومات.

البنية الأساسية

لغة AGSL (وGLSL) هي لغات خاصة بالنطاق بأسلوب C. تتتبّع أنواع مثل bool وint مكافئات C عن كثب، وهناك أنواع إضافية لدعم المتجهات والمصفوفات التي تتوافق مع وظائف النطاق.

يمكن تطبيق المؤهِّلات على الأنواع للحصول على تلميحات الدقة بطريقة فريدة في لغات التظليل. إنّ بُنى التحكّم، مثل عبارات if-else، تعمل بالطريقة التي تعمل بها في لغة C، وتتوافق اللغة أيضًا مع عبارات switch وتكرارات for مع قيود مفروضة. تتطلب بعض بنى التحكم تعبيرات ثابتة يمكن تقييمها في وقت التجميع.

يدعم AGSL الدوال؛ يبدأ كل برنامج تظليل بالدالة main. يمكن استخدام الدوال التي يحدّدها المستخدم، بدون إتاحة أي نوع من الدوال الاسترجاعية. تستخدم الدوال اصطلاح استدعاء "value-return"؛ ويتم نسخ القيم التي يتم تمريرها إلى الدوال إلى معلَمات عند استدعاء الدالة، ويتم نسخ المخرجات مرة أخرى. ويتم تحديد ذلك من خلال المؤهِّلات in وout وinout.