Android Graphics Shading Language (AGSL)

Android 13 এবং তার পরবর্তী ভার্সনে Android Graphics Shading Language (AGSL) ব্যবহার করা হয় প্রোগ্রাম করা যায় এমন RuntimeShader অবজেক্টের আচরণ নির্ধারণ করতে। AGSL GLSL ফ্র্যাগমেন্ট শেডারের সাথে এর বেশিরভাগ সিনট্যাক্স শেয়ার করে, তবে Canvas-এর মধ্যে পেইন্টিং কাস্টমাইজ করতে এবং View কন্টেন্ট ফিল্টার করতে Android গ্রাফিক্স রেন্ডারিং সিস্টেমের মধ্যে কাজ করে।

অপারেশনের তত্ত্ব

AGSL এফেক্ট বৃহত্তর Android গ্রাফিক্স পাইপলাইনের অংশ হিসেবে কাজ করে। Android যখন GPU অ্যাক্সিলারেটেড ড্রয়িং অপারেশন ইস্যু করে, তখন এটি প্রয়োজনীয় কাজ করার জন্য একটি GPU ফ্র্যাগমেন্ট শেডার অ্যাসেম্বল করে। এই শেডারে সাধারণত একাধিক পিস থাকে। যেমন, এর মধ্যে এগুলি অন্তর্ভুক্ত থাকতে পারে:

  • আঁকা হচ্ছে এমন আকারের ভিতরে বা বাইরে কোনও পিক্সেল আছে কিনা তা মূল্যায়ন করা (বা বর্ডারে, যেখানে এটি অ্যান্টি-অ্যালাইজিং প্রয়োগ করতে পারে)।
  • ক্লিপিং অঞ্চলের ভিতরে বা বাইরে কোনও পিক্সেল পড়ে কিনা তা মূল্যায়ন করা (আবার, বর্ডার পিক্সেলের জন্য সম্ভাব্য অ্যান্টি-অ্যালাইজিং লজিক সহ)।
  • Paint-এ Shader-এর লজিক। Shader আসলে অবজেক্টের ট্রি হতে পারে (ComposeShader এবং নিচে বর্ণিত অন্যান্য ফিচারের কারণে)।
  • ColorFilter-এর জন্য একই ধরনের লজিক।
  • ব্লেন্ডিং কোড (নির্দিষ্ট ধরনের BlendMode-এর জন্য)।
  • Android-এর কালার ম্যানেজমেন্টের অংশ হিসেবে কালার স্পেস কনভার্সন কোড।
  • Paint-এর Shader, ColorFilter বা BlendMode ফিল্ডে অবজেক্টের জটিল ট্রি থাকলে, সেক্ষেত্রেও শুধুমাত্র একটি GPU ফ্র্যাগমেন্ট শেডার থাকে। সেই ট্রি-এর প্রতিটি Node একটি ফাংশন তৈরি করে। ক্লিপিং কোড এবং জ্যামিতি কোড, প্রতিটি একটি করে ফাংশন তৈরি করে। ব্লেন্ডিং কোড একটি ফাংশন তৈরি করতে পারে। সামগ্রিক ফ্র্যাগমেন্ট শেডার তখন এই সব ফাংশনকে কল করে (যা অন্যান্য ফাংশনকে কল করতে পারে, যেমন শেডার ট্রির ক্ষেত্রে)।

আপনার AGSL এফেক্ট GPU-এর ফ্র্যাগমেন্ট শেডারে একটি ফাংশন (বা একাধিক ফাংশন) কন্ট্রিবিউট করে।

প্রাথমিক সিনট্যাক্স

AGSL (এবং GLSL) হল C-স্টাইল ডোমেন-নির্দিষ্ট ভাষা। bool এবং int-এর মতো ধরনগুলি তাদের C সমতুল্যগুলিকে ঘনিষ্ঠভাবে ট্র্যাক করে; ডোমেন কার্যকারিতা সমর্থন করে এমন ভেক্টর এবং ম্যাট্রিক্স সমর্থন করার জন্য অতিরিক্ত ধরন রয়েছে।

শেডিং ল্যাঙ্গুয়েজের ক্ষেত্রে অনন্য উপায়ে নির্ভুল ইঙ্গিত দেওয়ার জন্য কোয়ালিফায়ার প্রয়োগ করা যেতে পারে। if-else স্টেটমেন্টের মতো কন্ট্রোল স্ট্রাকচার C-এর মতোই কাজ করে; এই ল্যাঙ্গুয়েজে switch স্টেটমেন্ট ও for লুপের জন্য সীমাবদ্ধতা সহ সহায়তা প্রদান করা হয়। কিছু কন্ট্রোল স্ট্রাকচারের জন্য কনস্ট্যান্ট এক্সপ্রেশন প্রয়োজন হয় যা কম্পাইল করার সময় মূল্যায়ন করা যায়।

AGSL-এ ফাংশন কাজ করে; প্রতিটি শেডার প্রোগ্রাম main ফাংশন দিয়ে শুরু হয়। ব্যবহারকারীর দ্বারা নির্ধারিত ফাংশন কাজ করে, তবে কোনও ধরনের পুনরাবৃত্তির জন্য কাজ করে না। ফাংশন "ভ্যালু-রিটার্ন" কলিং কনভেনশন ব্যবহার করে; ফাংশনে পাস করা ভ্যালু ফাংশন কল করার সময় প্যারামিটারে কপি করা হয় এবং আউটপুট আবার কপি করা হয়; এটি in, out এবং inout কোয়ালিফায়ার দ্বারা নির্ধারিত হয়।