অ্যান্ড্রয়েড গ্রাফিক্স শেডিং ল্যাঙ্গুয়েজ (এজিএসএল) অ্যান্ড্রয়েড 13 এবং তার উপরে প্রোগ্রামেবল RuntimeShader
অবজেক্টের আচরণ সংজ্ঞায়িত করতে ব্যবহার করে। AGSL এর বেশিরভাগ সিনট্যাক্স GLSL ফ্র্যাগমেন্ট শেডারের সাথে শেয়ার করে, কিন্তু Canvas
মধ্যে পেইন্টিং কাস্টমাইজ করতে এবং কন্টেন্ট View
ফিল্টার করতে অ্যান্ড্রয়েড গ্রাফিক্স রেন্ডারিং সিস্টেমের মধ্যে কাজ করে।
অপারেশন তত্ত্ব
AGSL প্রভাব বৃহত্তর অ্যান্ড্রয়েড গ্রাফিক্স পাইপলাইনের অংশ হিসাবে বিদ্যমান। যখন Android একটি GPU ত্বরিত অঙ্কন অপারেশন ইস্যু করে, তখন এটি প্রয়োজনীয় কাজ করার জন্য একটি একক GPU ফ্র্যাগমেন্ট শেডারকে একত্রিত করে। এই শেডারে সাধারণত বেশ কয়েকটি টুকরা থাকে। উদাহরণস্বরূপ, এটি অন্তর্ভুক্ত হতে পারে:
- একটি পিক্সেল আঁকা আকৃতির ভিতরে বা বাইরে পড়ে কিনা তা মূল্যায়ন করা হচ্ছে (বা সীমানায়, যেখানে এটি অ্যান্টি-আলিয়াসিং প্রয়োগ করতে পারে)।
- একটি পিক্সেল ক্লিপিং অঞ্চলের ভিতরে বা বাইরে পড়ে কিনা তা মূল্যায়ন করা (আবার, বর্ডার পিক্সেলের জন্য সম্ভাব্য অ্যান্টি-অ্যালিয়াসিং লজিক সহ)।
-
Paint
Shader
জন্য যুক্তি। Shader আসলে বস্তুর একটি গাছ হতে পারে (ComposeShader
এবং নীচে বর্ণিত অন্যান্য বৈশিষ্ট্যগুলির কারণে)। -
ColorFilter
এর জন্য অনুরূপ যুক্তি। - ব্লেন্ডিং কোড (নির্দিষ্ট ধরণের
BlendMode
জন্য)। - কালার স্পেস কনভার্সন কোড, অ্যান্ড্রয়েডের কালার ম্যানেজমেন্টের অংশ হিসেবে।
- যখন
Paint
Shader
,ColorFilter
বাBlendMode
ক্ষেত্রগুলিতে বস্তুর একটি জটিল গাছ থাকে, তখনও শুধুমাত্র একটি জিপিইউ ফ্র্যাগমেন্ট শেডার থাকে। সেই গাছের প্রতিটি নোড একটি একক ফাংশন তৈরি করে। ক্লিপিং কোড এবং জ্যামিতি কোড প্রতিটি একটি ফাংশন তৈরি করে। মিশ্রন কোড একটি ফাংশন তৈরি করতে পারে. সামগ্রিক ফ্র্যাগমেন্ট শেডার তারপর এই সমস্ত ফাংশনকে কল করে (যা অন্য ফাংশনকে কল করতে পারে, যেমন একটি শেডার গাছের ক্ষেত্রে)।
আপনার AGSL প্রভাব GPU এর ফ্র্যাগমেন্ট শেডারে একটি ফাংশন (বা ফাংশন) অবদান রাখে।
মৌলিক সিনট্যাক্স
AGSL (এবং GLSL) হল সি-স্টাইলের ডোমেন নির্দিষ্ট ভাষা। bool
এবং int
মতো প্রকারগুলি তাদের C সমতুল্যগুলিকে ঘনিষ্ঠভাবে ট্র্যাক করে; ডোমেনের কার্যকারিতা সমর্থন করে এমন ভেক্টর এবং ম্যাট্রিক্স সমর্থন করার জন্য অতিরিক্ত প্রকার রয়েছে।
নির্ভুলতার ইঙ্গিতের জন্য কোয়ালিফায়ারগুলি এমনভাবে প্রয়োগ করা যেতে পারে যা ভাষার ছায়া দেওয়ার জন্য অনন্য। কন্ট্রোল স্ট্রাকচার যেমন if-else
স্টেটমেন্ট অনেকটা C-তে যেমন কাজ করে; ভাষাটি switch
স্টেটমেন্ট এবং সীমাবদ্ধতা সহ লুপগুলির for
সমর্থন প্রদান করে। কিছু নিয়ন্ত্রণ কাঠামোর জন্য ধ্রুবক অভিব্যক্তি প্রয়োজন যা কম্পাইলের সময় মূল্যায়ন করা যেতে পারে।
AGSL ফাংশন সমর্থন করে; প্রতিটি শেডার প্রোগ্রাম main
ফাংশন দিয়ে শুরু হয়। ব্যবহারকারীর সংজ্ঞায়িত ফাংশন সমর্থিত, কোনো ধরনের পুনরাবৃত্তির জন্য সমর্থন ছাড়াই। ফাংশন একটি "মান-রিটার্ন" কলিং কনভেনশন ব্যবহার করে; যখন ফাংশন কল করা হয় তখন ফাংশনে পাস করা মানগুলি প্যারামিটারে অনুলিপি করা হয় এবং আউটপুটগুলি আবার কপি করা হয়; এটি in
, out
এবং inout
কোয়ালিফায়ার দ্বারা নির্ধারিত হয়।
অ্যান্ড্রয়েড গ্রাফিক্স শেডিং ল্যাঙ্গুয়েজ (এজিএসএল) অ্যান্ড্রয়েড 13 এবং তার উপরে প্রোগ্রামেবল RuntimeShader
অবজেক্টের আচরণ সংজ্ঞায়িত করতে ব্যবহার করে। AGSL এর বেশিরভাগ সিনট্যাক্স GLSL ফ্র্যাগমেন্ট শেডারের সাথে শেয়ার করে, কিন্তু Canvas
মধ্যে পেইন্টিং কাস্টমাইজ করতে এবং কন্টেন্ট View
ফিল্টার করতে অ্যান্ড্রয়েড গ্রাফিক্স রেন্ডারিং সিস্টেমের মধ্যে কাজ করে।
অপারেশন তত্ত্ব
AGSL প্রভাব বৃহত্তর অ্যান্ড্রয়েড গ্রাফিক্স পাইপলাইনের অংশ হিসাবে বিদ্যমান। যখন Android একটি GPU ত্বরিত অঙ্কন অপারেশন ইস্যু করে, তখন এটি প্রয়োজনীয় কাজ করার জন্য একটি একক GPU ফ্র্যাগমেন্ট শেডারকে একত্রিত করে। এই শেডারে সাধারণত বেশ কয়েকটি টুকরা থাকে। উদাহরণস্বরূপ, এটি অন্তর্ভুক্ত হতে পারে:
- একটি পিক্সেল আঁকা আকৃতির ভিতরে বা বাইরে পড়ে কিনা তা মূল্যায়ন করা হচ্ছে (বা সীমানায়, যেখানে এটি অ্যান্টি-আলিয়াসিং প্রয়োগ করতে পারে)।
- একটি পিক্সেল ক্লিপিং অঞ্চলের ভিতরে বা বাইরে পড়ে কিনা তা মূল্যায়ন করা (আবার, বর্ডার পিক্সেলের জন্য সম্ভাব্য অ্যান্টি-অ্যালিয়াসিং লজিক সহ)।
-
Paint
Shader
জন্য যুক্তি। Shader আসলে বস্তুর একটি গাছ হতে পারে (ComposeShader
এবং নীচে বর্ণিত অন্যান্য বৈশিষ্ট্যগুলির কারণে)। -
ColorFilter
এর জন্য অনুরূপ যুক্তি। - ব্লেন্ডিং কোড (নির্দিষ্ট ধরণের
BlendMode
জন্য)। - কালার স্পেস কনভার্সন কোড, অ্যান্ড্রয়েডের কালার ম্যানেজমেন্টের অংশ হিসেবে।
- যখন
Paint
Shader
,ColorFilter
বাBlendMode
ক্ষেত্রগুলিতে বস্তুর একটি জটিল গাছ থাকে, তখনও শুধুমাত্র একটি জিপিইউ ফ্র্যাগমেন্ট শেডার থাকে। সেই গাছের প্রতিটি নোড একটি একক ফাংশন তৈরি করে। ক্লিপিং কোড এবং জ্যামিতি কোড প্রতিটি একটি ফাংশন তৈরি করে। মিশ্রন কোড একটি ফাংশন তৈরি করতে পারে. সামগ্রিক ফ্র্যাগমেন্ট শেডার তারপর এই সমস্ত ফাংশনকে কল করে (যা অন্য ফাংশনকে কল করতে পারে, যেমন একটি শেডার গাছের ক্ষেত্রে)।
আপনার AGSL প্রভাব GPU এর ফ্র্যাগমেন্ট শেডারে একটি ফাংশন (বা ফাংশন) অবদান রাখে।
মৌলিক সিনট্যাক্স
AGSL (এবং GLSL) হল সি-স্টাইলের ডোমেন নির্দিষ্ট ভাষা। bool
এবং int
মতো প্রকারগুলি তাদের C সমতুল্যগুলিকে ঘনিষ্ঠভাবে ট্র্যাক করে; ডোমেনের কার্যকারিতা সমর্থন করে এমন ভেক্টর এবং ম্যাট্রিক্স সমর্থন করার জন্য অতিরিক্ত প্রকার রয়েছে।
নির্ভুলতার ইঙ্গিতের জন্য কোয়ালিফায়ারগুলি এমনভাবে প্রয়োগ করা যেতে পারে যা ভাষার ছায়া দেওয়ার জন্য অনন্য। কন্ট্রোল স্ট্রাকচার যেমন if-else
স্টেটমেন্ট অনেকটা C-তে যেমন কাজ করে; ভাষাটি switch
স্টেটমেন্ট এবং সীমাবদ্ধতা সহ লুপগুলির for
সমর্থন প্রদান করে। কিছু নিয়ন্ত্রণ কাঠামোর জন্য ধ্রুবক অভিব্যক্তি প্রয়োজন যা কম্পাইলের সময় মূল্যায়ন করা যেতে পারে।
AGSL ফাংশন সমর্থন করে; প্রতিটি শেডার প্রোগ্রাম main
ফাংশন দিয়ে শুরু হয়। ব্যবহারকারীর সংজ্ঞায়িত ফাংশন সমর্থিত, কোনো ধরনের পুনরাবৃত্তির জন্য সমর্থন ছাড়াই। ফাংশন একটি "মান-রিটার্ন" কলিং কনভেনশন ব্যবহার করে; যখন ফাংশন কল করা হয় তখন ফাংশনে পাস করা মানগুলি প্যারামিটারে অনুলিপি করা হয় এবং আউটপুটগুলি আবার কপি করা হয়; এটি in
, out
এবং inout
কোয়ালিফায়ার দ্বারা নির্ধারিত হয়।