زبان سایه زنی گرافیک اندروید (AGSL)، زبان سایه زنی گرافیک اندروید (AGSL)

Android Graphics Shading Language (AGSL) توسط Android 13 و بالاتر برای تعریف رفتار اشیاء RuntimeShader قابل برنامه ریزی استفاده می شود. AGSL قسمت اعظم نحو خود را با شیدرهای قطعه GLSL به اشتراک می گذارد، اما در سیستم رندر گرافیکی اندروید کار می کند تا هم نقاشی را در Canvas سفارشی کند و هم محتوای View را فیلتر کند.

تئوری عملیات

جلوه های AGSL به عنوان بخشی از خط لوله گرافیکی بزرگتر اندروید وجود دارد. هنگامی که Android یک عملیات ترسیم سریع GPU را صادر می‌کند، یک تک تک سایه‌زن قطعه GPU را برای انجام کارهای مورد نیاز جمع‌آوری می‌کند. این سایه زن معمولاً شامل چندین قطعه است. به عنوان مثال، ممکن است شامل موارد زیر باشد:

  • ارزیابی اینکه آیا یک پیکسل در داخل یا خارج شکل ترسیم شده قرار می‌گیرد (یا روی حاشیه، جایی که ممکن است ضد آلیاسینگ اعمال شود).
  • ارزیابی اینکه آیا یک پیکسل در داخل یا خارج از منطقه برش قرار می گیرد (دوباره، با منطق احتمالی ضد aliasing برای پیکسل های حاشیه).
  • منطق برای Shader on the Paint . Shader در واقع می تواند درختی از اشیا باشد (به دلیل ComposeShader و سایر ویژگی هایی که در زیر توضیح داده شده است).
  • منطق مشابه برای ColorFilter .
  • کد ترکیبی (برای انواع خاصی از BlendMode ).
  • کد تبدیل فضای رنگ، به عنوان بخشی از مدیریت رنگ اندروید.
  • هنگامی که Paint دارای درخت پیچیده ای از اشیاء در فیلدهای Shader ، ColorFilter ، یا BlendMode باشد، هنوز فقط یک تکه سایه زن واحد GPU وجود دارد. هر گره در آن درخت یک تابع واحد ایجاد می کند. کد برش و کد هندسی هر کدام یک تابع ایجاد می کنند. کد ترکیبی ممکن است یک تابع ایجاد کند. سپس شیدر قطعه کلی همه این توابع را فراخوانی می کند (که ممکن است توابع دیگر را فراخوانی کند، به عنوان مثال در مورد درخت سایه زن).

افکت AGSL شما یک تابع (یا توابع) را به قطعه سایه زن GPU کمک می کند.

نحو پایه

AGSL (و GLSL) زبان‌های خاص دامنه سبک C هستند. انواعی مانند bool و int از نزدیک معادل C خود را دنبال می کنند. انواع دیگری برای پشتیبانی از بردارها و ماتریس هایی وجود دارد که از عملکرد دامنه پشتیبانی می کنند.

واجد شرایط را می توان به گونه ای برای نکات دقیق به گونه ای اعمال کرد که برای زبان های سایه زنی منحصر به فرد است. ساختارهای کنترلی مانند دستورهای if-else بسیار شبیه به C کار می کنند. این زبان همچنین از دستورات switch و for با محدودیت پشتیبانی می‌کند. برخی از ساختارهای کنترلی به عبارات ثابتی نیاز دارند که در زمان کامپایل قابل ارزیابی باشند.

AGSL از توابع پشتیبانی می کند. هر برنامه سایه زن با تابع main شروع می شود. توابع تعریف شده توسط کاربر بدون پشتیبانی از هر نوع بازگشتی پشتیبانی می شوند. توابع از یک قرارداد فراخوانی "بازده ارزش" استفاده می کنند. مقادیر ارسال شده به توابع در هنگام فراخوانی تابع در پارامترها کپی می شوند و خروجی ها دوباره کپی می شوند. این توسط واجد شرایط in , out , inout تعیین می شود.

،

Android Graphics Shading Language (AGSL) توسط Android 13 و بالاتر برای تعریف رفتار اشیاء RuntimeShader قابل برنامه ریزی استفاده می شود. AGSL قسمت اعظم نحو خود را با شیدرهای قطعه GLSL به اشتراک می گذارد، اما در سیستم رندر گرافیکی اندروید کار می کند تا هم نقاشی را در Canvas سفارشی کند و هم محتوای View را فیلتر کند.

تئوری عملیات

جلوه های AGSL به عنوان بخشی از خط لوله گرافیکی بزرگتر اندروید وجود دارد. هنگامی که Android یک عملیات ترسیم سریع GPU را صادر می‌کند، یک تک تک سایه‌زن قطعه GPU را برای انجام کارهای مورد نیاز جمع‌آوری می‌کند. این سایه زن معمولاً شامل چندین قطعه است. به عنوان مثال، ممکن است شامل موارد زیر باشد:

  • ارزیابی اینکه آیا یک پیکسل در داخل یا خارج شکل ترسیم شده قرار می‌گیرد (یا روی حاشیه، جایی که ممکن است ضد آلیاسینگ اعمال شود).
  • ارزیابی اینکه آیا یک پیکسل در داخل یا خارج از منطقه برش قرار می گیرد (دوباره، با منطق احتمالی ضد aliasing برای پیکسل های حاشیه).
  • منطق برای Shader on the Paint . Shader در واقع می تواند درختی از اشیا باشد (به دلیل ComposeShader و سایر ویژگی هایی که در زیر توضیح داده شده است).
  • منطق مشابه برای ColorFilter .
  • کد ترکیبی (برای انواع خاصی از BlendMode ).
  • کد تبدیل فضای رنگ، به عنوان بخشی از مدیریت رنگ اندروید.
  • هنگامی که Paint دارای درخت پیچیده ای از اشیاء در فیلدهای Shader ، ColorFilter ، یا BlendMode باشد، هنوز فقط یک تکه سایه زن واحد GPU وجود دارد. هر گره در آن درخت یک تابع واحد ایجاد می کند. کد برش و کد هندسی هر کدام یک تابع ایجاد می کنند. کد ترکیبی ممکن است یک تابع ایجاد کند. سپس شیدر قطعه کلی همه این توابع را فراخوانی می کند (که ممکن است توابع دیگر را فراخوانی کند، به عنوان مثال در مورد درخت سایه زن).

افکت AGSL شما یک تابع (یا توابع) را به قطعه سایه زن GPU کمک می کند.

نحو پایه

AGSL (و GLSL) زبان‌های خاص دامنه سبک C هستند. انواعی مانند bool و int از نزدیک معادل C خود را دنبال می کنند. انواع دیگری برای پشتیبانی از بردارها و ماتریس هایی وجود دارد که از عملکرد دامنه پشتیبانی می کنند.

واجد شرایط را می توان به گونه ای برای نکات دقیق به گونه ای اعمال کرد که برای زبان های سایه زنی منحصر به فرد است. ساختارهای کنترلی مانند دستورهای if-else بسیار شبیه به C کار می کنند. این زبان همچنین از دستورات switch و for با محدودیت پشتیبانی می‌کند. برخی از ساختارهای کنترلی به عبارات ثابتی نیاز دارند که در زمان کامپایل قابل ارزیابی باشند.

AGSL از توابع پشتیبانی می کند. هر برنامه سایه زن با تابع main شروع می شود. توابع تعریف شده توسط کاربر بدون پشتیبانی از هر نوع بازگشتی پشتیبانی می شوند. توابع از یک قرارداد فراخوانی "بازده ارزش" استفاده می کنند. مقادیر ارسال شده به توابع در هنگام فراخوانی تابع در پارامترها کپی می شوند و خروجی ها دوباره کپی می شوند. این توسط واجد شرایط in , out , inout تعیین می شود.