গ্রাফিক্স

অ্যান্ড্রয়েড গ্রাফিক্স HAL আইকন

অ্যান্ড্রয়েড ফ্রেমওয়ার্ক 2D এবং 3D এর জন্য বিভিন্ন ধরণের গ্রাফিক্স রেন্ডারিং API অফার করে যা গ্রাফিক্স ড্রাইভারগুলির প্রস্তুতকারকের বাস্তবায়নের সাথে ইন্টারঅ্যাক্ট করে, তাই সেই APIগুলি কীভাবে উচ্চ স্তরে কাজ করে সে সম্পর্কে ভাল ধারণা থাকা গুরুত্বপূর্ণ। এই পৃষ্ঠাটি গ্রাফিক্স হার্ডওয়্যার অ্যাবস্ট্রাকশন লেয়ার (HAL) পরিচয় করিয়ে দেয় যার উপর সেই ড্রাইভারগুলি তৈরি করা হয়।

অ্যাপ্লিকেশন ডেভেলপাররা তিনটি উপায়ে স্ক্রীনে ছবি আঁকে: ক্যানভাস , ওপেনজিএল ইএস বা ভলকান দিয়ে।

অ্যান্ড্রয়েড গ্রাফিক্স উপাদান

এপিআই ডেভেলপাররা যে রেন্ডারিং ব্যবহার করেন তা কোন ব্যাপার না, সবকিছুই একটি পৃষ্ঠে রেন্ডার করা হয়। পৃষ্ঠটি একটি বাফার সারির প্রযোজক পক্ষের প্রতিনিধিত্ব করে যা প্রায়শই SurfaceFlinger দ্বারা গ্রাস করা হয়। অ্যান্ড্রয়েড প্ল্যাটফর্মে তৈরি প্রতিটি উইন্ডো একটি পৃষ্ঠ দ্বারা সমর্থিত। রেন্ডার করা সমস্ত দৃশ্যমান পৃষ্ঠতল সারফেসফ্লিংগার দ্বারা ডিসপ্লেতে সংমিশ্রিত হয়।

নিম্নলিখিত চিত্রটি দেখায় কিভাবে মূল উপাদানগুলি একসাথে কাজ করে:

ইমেজ রেন্ডারিং উপাদান

চিত্র 1. কিভাবে পৃষ্ঠতল রেন্ডার করা হয়

প্রধান উপাদান নীচে বর্ণনা করা হয়:

ইমেজ স্ট্রীম প্রযোজক

একটি ইমেজ স্ট্রিম প্রযোজক এমন কিছু হতে পারে যা ব্যবহারের জন্য গ্রাফিক বাফার তৈরি করে। উদাহরণগুলির মধ্যে OpenGL ES, Canvas 2D এবং মিডিয়াসার্ভার ভিডিও ডিকোডার অন্তর্ভুক্ত।

ইমেজ স্ট্রিম ভোক্তাদের

ইমেজ স্ট্রীমের সবচেয়ে সাধারণ ভোক্তা হল SurfaceFlinger, সিস্টেম পরিষেবা যা বর্তমানে দৃশ্যমান সারফেস ব্যবহার করে এবং উইন্ডো ম্যানেজার দ্বারা প্রদত্ত তথ্য ব্যবহার করে ডিসপ্লেতে কম্পোজ করে। SurfaceFlinger হল একমাত্র পরিষেবা যা প্রদর্শনের বিষয়বস্তু পরিবর্তন করতে পারে। সারফেসফ্লিংগার ওপেনজিএল এবং হার্ডওয়্যার কম্পোজার ব্যবহার করে পৃষ্ঠের একটি গ্রুপ রচনা করতে।

অন্যান্য OpenGL ES অ্যাপগুলিও ইমেজ স্ট্রীম ব্যবহার করতে পারে, যেমন ক্যামেরা অ্যাপ ক্যামেরা প্রিভিউ ইমেজ স্ট্রিম ব্যবহার করে। নন-GL অ্যাপ্লিকেশনগুলিও ভোক্তা হতে পারে, উদাহরণস্বরূপ ImageReader ক্লাস।

হার্ডওয়্যার কম্পোজার

ডিসপ্লে সাবসিস্টেমের জন্য হার্ডওয়্যার বিমূর্ততা। সারফেসফ্লিংগার ওপেনজিএল এবং জিপিইউ থেকে কাজ অফলোড করার জন্য হার্ডওয়্যার কম্পোজারকে নির্দিষ্ট রচনার কাজ অর্পণ করতে পারে। SurfaceFlinger শুধুমাত্র অন্য OpenGL ES ক্লায়েন্ট হিসাবে কাজ করে। সুতরাং যখন সারফেসফ্লিঙ্গার সক্রিয়ভাবে এক বাফারকে তৃতীয়তে এক বা দুটি সংমিশ্রণ করছে, উদাহরণস্বরূপ, এটি OpenGL ES ব্যবহার করছে। এটি কম্পোজিটিংকে কম শক্তি দেয় GPU সমস্ত গণনা পরিচালনা করার চেয়ে।

হার্ডওয়্যার কম্পোজার এইচএএল বাকি অর্ধেক কাজ পরিচালনা করে এবং এটি সমস্ত অ্যান্ড্রয়েড গ্রাফিক্স রেন্ডারিংয়ের কেন্দ্রবিন্দু। হার্ডওয়্যার কম্পোজারকে অবশ্যই ইভেন্টগুলি সমর্থন করতে হবে, যার মধ্যে একটি হল VSYNC (অন্যটি হল প্লাগ-এন্ড-প্লেএইচডিএমআই সমর্থনের জন্য হটপ্লাগ)।

গ্র্যালোক

ইমেজ নির্মাতাদের অনুরোধ করা মেমরি বরাদ্দ করার জন্য গ্রাফিক্স মেমরি অ্যালোকেটর (Gralloc) প্রয়োজন। বিস্তারিত জানার জন্য, Gralloc HAL দেখুন।

তথ্য প্রবাহ

অ্যান্ড্রয়েড গ্রাফিক্স পাইপলাইনের চিত্রের জন্য নিম্নলিখিত চিত্রটি দেখুন:

গ্রাফিক্স ডেটা প্রবাহ

চিত্র 2. Android এর মাধ্যমে গ্রাফিক ডেটা প্রবাহ

বাম দিকের বস্তুগুলি হল রেন্ডারার যা গ্রাফিক্স বাফার তৈরি করে, যেমন হোম স্ক্রীন, স্ট্যাটাস বার এবং সিস্টেম UI। SurfaceFlinger হল কম্পোজিটর এবং হার্ডওয়্যার কম্পোজার হল কম্পোজার।

বাফার সারি

বাফার কিউ অ্যান্ড্রয়েড গ্রাফিক্স উপাদানগুলির মধ্যে আঠা প্রদান করে। এগুলি একজোড়া সারি যা প্রযোজক থেকে ভোক্তা পর্যন্ত বাফারগুলির ধ্রুবক চক্রের মধ্যস্থতা করে৷ একবার প্রযোজকরা তাদের বাফারগুলি বন্ধ করে দিলে, সারফেসফ্লিঙ্গার ডিসপ্লেতে সমস্ত কিছু সংমিশ্রণের জন্য দায়ী।

BufferQueue যোগাযোগ প্রক্রিয়ার জন্য নিম্নলিখিত চিত্রটি দেখুন।

বাফার কিউ যোগাযোগ প্রক্রিয়া

চিত্র 3. বাফার কিউ যোগাযোগ প্রক্রিয়া

BufferQueue-এ এমন যুক্তি রয়েছে যা ইমেজ স্ট্রীম প্রযোজক এবং ইমেজ স্ট্রিম ভোক্তাদের একত্রে আবদ্ধ করে। ছবি নির্মাতাদের কিছু উদাহরণ হল ক্যামেরা HAL বা OpenGL ES গেম দ্বারা উত্পাদিত ক্যামেরা প্রিভিউ। ইমেজ গ্রাহকদের কিছু উদাহরণ হল SurfaceFlinger বা অন্য একটি অ্যাপ যা একটি OpenGL ES স্ট্রিম প্রদর্শন করে, যেমন ক্যামেরা অ্যাপ ক্যামেরা ভিউফাইন্ডার প্রদর্শন করে।

BufferQueue হল একটি ডেটা স্ট্রাকচার যা একটি বাফার পুলকে একটি সারির সাথে একত্রিত করে এবং প্রক্রিয়াগুলির মধ্যে বাফারগুলি পাস করতে বাইন্ডার আইপিসি ব্যবহার করে। প্রযোজক ইন্টারফেস, বা আপনি গ্রাফিক বাফার তৈরি করতে চান এমন কাউকে যা পাস করেন তা হল IGraphicBufferProducer ( সারফেসটেক্সচারের অংশ)। BufferQueue প্রায়শই একটি সারফেসে রেন্ডার করতে এবং অন্যান্য কাজের মধ্যে একটি GL গ্রাহকের সাথে ব্যবহার করতে ব্যবহৃত হয়।

BufferQueue তিনটি ভিন্ন মোডে কাজ করতে পারে:

সিঙ্ক্রোনাস-মত মোড - ডিফল্টভাবে বাফারকিউ একটি সিঙ্ক্রোনাস-মতো মোডে কাজ করে, যেখানে প্রযোজকের কাছ থেকে আসা প্রতিটি বাফার ভোক্তার কাছে চলে যায়। এই মোডে কোন বাফার কখনও বাতিল করা হয় না। এবং যদি প্রযোজক খুব দ্রুত হয় এবং তাদের নিষ্কাশনের চেয়ে দ্রুত বাফার তৈরি করে, তাহলে এটি ব্লক করবে এবং বিনামূল্যে বাফারের জন্য অপেক্ষা করবে।

নন-ব্লকিং মোড - BufferQueue একটি নন-ব্লকিং মোডেও কাজ করতে পারে যেখানে এটি সেই ক্ষেত্রে বাফারের জন্য অপেক্ষা করার পরিবর্তে একটি ত্রুটি তৈরি করে। এই মোডে কোন বাফার কখনও বাতিল করা হয় না। এটি অ্যাপ্লিকেশন সফ্টওয়্যারের সম্ভাব্য অচলাবস্থা এড়ানোর জন্য দরকারী যা গ্রাফিক্স কাঠামোর জটিল নির্ভরতা বুঝতে পারে না।

বাতিল মোড - অবশেষে, বাফার কিউ ত্রুটি তৈরি বা অপেক্ষা করার পরিবর্তে পুরানো বাফারগুলি বাতিল করার জন্য কনফিগার করা হতে পারে। উদাহরণস্বরূপ, যদি টেক্সচার ভিউতে GL রেন্ডারিং পরিচালনা করা হয় এবং যত তাড়াতাড়ি সম্ভব অঙ্কন করা হয়, বাফারগুলি বাদ দিতে হবে।

এই কাজের অধিকাংশ পরিচালনা করতে, SurfaceFlinger অন্য OpenGL ES ক্লায়েন্ট হিসাবে কাজ করে। সুতরাং যখন সারফেসফ্লিঙ্গার সক্রিয়ভাবে এক বাফারকে তৃতীয়তে এক বা দুটি সংমিশ্রণ করছে, উদাহরণস্বরূপ, এটি OpenGL ES ব্যবহার করছে।

হার্ডওয়্যার কম্পোজার HAL বাকি অর্ধেক কাজ পরিচালনা করে। এই এইচএএল সমস্ত অ্যান্ড্রয়েড গ্রাফিক্স রেন্ডারিংয়ের কেন্দ্রীয় পয়েন্ট হিসাবে কাজ করে।