
অ্যান্ড্রয়েড ফ্রেমওয়ার্ক 2D এবং 3D এর জন্য বিভিন্ন ধরণের গ্রাফিক্স রেন্ডারিং API অফার করে যা গ্রাফিক্স ড্রাইভারের প্রস্তুতকারকের বাস্তবায়নের সাথে ইন্টারঅ্যাক্ট করে, তাই উচ্চ স্তরে এই API গুলি কীভাবে কাজ করে সে সম্পর্কে ভাল ধারণা থাকা গুরুত্বপূর্ণ। এই পৃষ্ঠাটি গ্রাফিক্স হার্ডওয়্যার অ্যাবস্ট্রাকশন লেয়ার (HAL) এর সাথে পরিচয় করিয়ে দেয় যার উপর এই ড্রাইভারগুলি তৈরি করা হয়। এই বিভাগটি চালিয়ে যাওয়ার আগে, নিম্নলিখিত শর্তাবলীর সাথে নিজেকে পরিচিত করুন:
Canvas (API উপাদান)Surface অবজেক্টের বিপরীতে প্রকৃত বিটগুলির সংমিশ্রণ পরিচালনা করে। Canvas ক্লাসে বিটম্যাপ, রেখা, বৃত্ত, আয়তক্ষেত্র, পাঠ্য ইত্যাদির স্ট্যান্ডার্ড কম্পিউটার অঙ্কনের পদ্ধতি রয়েছে এবং এটি একটি বিটম্যাপ বা পৃষ্ঠের সাথে আবদ্ধ। ক্যানভাস হলো স্ক্রিনে 2D বস্তু আঁকার সবচেয়ে সহজ এবং সহজ উপায়। বেস ক্লাস হল Canvas ।android.graphics.drawable এর সাবক্লাসে কম্পাইল করা হয়। ড্রয়েবল এবং অন্যান্য রিসোর্স সম্পর্কে আরও তথ্যের জন্য, অ্যাপ রিসোর্স ওভারভিউ দেখুন।android.opengl এবং javax.microedition.khronos.opengles প্যাকেজগুলি OpenGL ES কার্যকারিতা প্রকাশ করে।Surface (API উপাদান)Surface অবজেক্টের আকার পরিবর্তন করতে বিভিন্ন সহায়ক পদ্ধতি প্রদান করে। সরাসরি Surface ক্লাসের পরিবর্তে SurfaceView ক্লাস ব্যবহার করুন।SurfaceView (API এলিমেন্ট)View অবজেক্ট যা Surface অবজেক্টকে অঙ্কনের জন্য মোড়ানো হয় এবং এর আকার এবং ফর্ম্যাট গতিশীলভাবে নির্দিষ্ট করার জন্য পদ্ধতিগুলি প্রকাশ করে। সারফেস ভিউ গেম বা ক্যামেরা প্রিভিউয়ের মতো রিসোর্স-ইনটেনসিভ অপারেশনের জন্য UI থ্রেড থেকে স্বাধীনভাবে অঙ্কন করার একটি উপায় প্রদান করে, কিন্তু ফলস্বরূপ এটি অতিরিক্ত মেমরি ব্যবহার করে। সারফেস ভিউ ক্যানভাস এবং OpenGL ES গ্রাফিক্স উভয়কেই সমর্থন করে। SurfaceView অবজেক্টের বেস ক্লাস হল SurfaceView ।R.style এ তালিকাভুক্ত এবং Theme_ সাথে শুরুতে লেখা।View (API উপাদান)View ক্লাস হল একটি অ্যাক্টিভিটি বা ডায়ালগ স্ক্রিনের বেশিরভাগ লেআউট উপাদানের জন্য বেস ক্লাস, যেমন টেক্সট বক্স এবং উইন্ডোজ। একটি View অবজেক্ট তার প্যারেন্ট অবজেক্ট ( ViewGroup দেখুন) থেকে নিজেকে আঁকতে কল গ্রহণ করে এবং তার প্যারেন্ট অবজেক্টকে তার পছন্দের আকার এবং অবস্থান সম্পর্কে অবহিত করে, যা প্যারেন্ট দ্বারা সম্মানিত নাও হতে পারে। আরও তথ্যের জন্য, View দেখুন।ViewGroup (এপিআই উপাদান)android.widget প্যাকেজে থাকে, তবে ViewGroup ক্লাসটি প্রসারিত করে।android.widget প্যাকেজে রয়েছে।Window (API উপাদান)Window অ্যাবস্ট্রাক্ট ক্লাস থেকে প্রাপ্ত একটি অবজেক্ট যা একটি জেনেরিক উইন্ডোর উপাদানগুলিকে নির্দিষ্ট করে, যেমন লুক অ্যান্ড ফিল, টাইটেল বার টেক্সট এবং মেনুর অবস্থান এবং বিষয়বস্তু। ডায়ালগ এবং অ্যাক্টিভিটিগুলি একটি Window অবজেক্ট রেন্ডার করার জন্য Window ক্লাসের একটি বাস্তবায়ন ব্যবহার করে। আপনার Window ক্লাস বাস্তবায়ন করার বা আপনার অ্যাপে উইন্ডোজ ব্যবহার করার প্রয়োজন নেই।অ্যাপ ডেভেলপাররা তিনটি উপায়ে স্ক্রিনে ছবি আঁকেন: ক্যানভাস , ওপেনজিএল ইএস , অথবা ভুলকান ।
অ্যান্ড্রয়েড গ্রাফিক্স উপাদান
রেন্ডারিং API ডেভেলপাররা যে রেন্ডারিং APIই ব্যবহার করুক না কেন, সবকিছুই একটি পৃষ্ঠের উপর রেন্ডার করা হয়। পৃষ্ঠটি একটি বাফার কিউয়ের প্রযোজক দিককে প্রতিনিধিত্ব করে যা প্রায়শই SurfaceFlinger দ্বারা ব্যবহৃত হয়। Android প্ল্যাটফর্মে তৈরি প্রতিটি উইন্ডো একটি পৃষ্ঠ দ্বারা সমর্থিত। রেন্ডার করা সমস্ত দৃশ্যমান পৃষ্ঠগুলি SurfaceFlinger দ্বারা ডিসপ্লেতে কম্পোজিট করা হয়।
নিম্নলিখিত চিত্রটি দেখায় কিভাবে মূল উপাদানগুলি একসাথে কাজ করে:

চিত্র ১. পৃষ্ঠতল কীভাবে তৈরি করা হয়।
প্রধান উপাদানগুলি নিম্নলিখিত বিভাগগুলিতে বর্ণনা করা হয়েছে।
ইমেজ স্ট্রিম প্রযোজক
একটি ইমেজ স্ট্রিম প্রযোজক এমন যেকোনো কিছু হতে পারে যা ব্যবহারের জন্য গ্রাফিক বাফার তৈরি করে। উদাহরণগুলির মধ্যে রয়েছে OpenGL ES, Canvas 2D, এবং মিডিয়াসার্ভার ভিডিও ডিকোডার।
ইমেজ স্ট্রিম গ্রাহকরা
ইমেজ স্ট্রিমগুলির সবচেয়ে সাধারণ গ্রাহক হলেন সারফেসফ্লিঙ্গার, এটি একটি সিস্টেম পরিষেবা যা বর্তমানে দৃশ্যমান পৃষ্ঠগুলি ব্যবহার করে এবং উইন্ডো ম্যানেজার দ্বারা প্রদত্ত তথ্য ব্যবহার করে সেগুলিকে ডিসপ্লেতে সংমিশ্রণ করে। সারফেসফ্লিঙ্গারই একমাত্র পরিষেবা যা ডিসপ্লের বিষয়বস্তু পরিবর্তন করতে পারে। সারফেসফ্লিঙ্গার একদল পৃষ্ঠ রচনা করতে OpenGL এবং হার্ডওয়্যার কম্পোজার (HWC) ব্যবহার করে।
অন্যান্য OpenGL ES অ্যাপগুলিও ইমেজ স্ট্রিম ব্যবহার করতে পারে, যেমন ক্যামেরা অ্যাপ ক্যামেরা প্রিভিউ ইমেজ স্ট্রিম ব্যবহার করে। নন-GL অ্যাপগুলিও ভোক্তা হতে পারে, উদাহরণস্বরূপ ImageReader ক্লাস।
হার্ডওয়্যার কম্পোজার
ডিসপ্লে সাবসিস্টেমের জন্য হার্ডওয়্যার অ্যাবস্ট্রাকশন। SurfaceFlinger OpenGL এবং GPU থেকে কাজ অফলোড করার জন্য HWC-কে নির্দিষ্ট কম্পোজিশন কাজ অর্পণ করতে পারে। SurfaceFlinger কেবল আরেকটি OpenGL ES ক্লায়েন্ট হিসেবে কাজ করে। তাই যখন SurfaceFlinger সক্রিয়ভাবে একটি বা দুটি বাফারকে তৃতীয়াংশে কম্পোজিট করছে, তখন এটি OpenGL ES ব্যবহার করছে। এর ফলে GPU-এর সমস্ত গণনা পরিচালনার চেয়ে কম্পোজিটিং কম শক্তি পায়।
হার্ডওয়্যার কম্পোজার HAL বাকি অর্ধেক কাজ পরিচালনা করে এবং সমস্ত অ্যান্ড্রয়েড গ্রাফিক্স রেন্ডারিংয়ের কেন্দ্রীয় বিন্দু। HWC অবশ্যই ইভেন্টগুলিকে সমর্থন করবে, যার মধ্যে একটি হল VSync (অন্যটি হল প্লাগ-এন্ড-প্লে HDMI সমর্থনের জন্য হটপ্লাগ)।
গ্র্যালোক
ইমেজ প্রযোজকদের অনুরোধকৃত মেমরি বরাদ্দ করার জন্য গ্রাফিক্স মেমরি অ্যালোকেটর (Gralloc) প্রয়োজন। বিস্তারিত জানার জন্য, BufferQueue এবং Gralloc দেখুন।
তথ্য প্রবাহ
নিম্নলিখিত চিত্রটি অ্যান্ড্রয়েড গ্রাফিক্স পাইপলাইন চিত্রিত করে:

চিত্র ২। অ্যান্ড্রয়েডের মাধ্যমে গ্রাফিক ডেটা প্রবাহ।
বাম দিকের বস্তুগুলি হল রেন্ডারার যা গ্রাফিক্স বাফার তৈরি করে, যেমন হোম স্ক্রিন, স্ট্যাটাস বার এবং সিস্টেম UI। সারফেসফ্লিংগার হল কম্পোজিটর এবং HWC হল কম্পোজার।
বাফারকিউ
বাফারকিউ অ্যান্ড্রয়েড গ্রাফিক্স উপাদানগুলির মধ্যে আঠা প্রদান করে। এগুলি হল একজোড়া কিউ যা প্রযোজক থেকে গ্রাহক পর্যন্ত বাফারের ধ্রুবক চক্রের মধ্যস্থতা করে। প্রযোজকরা তাদের বাফারগুলি হস্তান্তর করার পরে, সারফেসফ্লিংগার ডিসপ্লেতে সবকিছু কম্পোজিট করার জন্য দায়ী।
নিম্নলিখিত চিত্রটি BufferQueue যোগাযোগ প্রক্রিয়াটি চিত্রিত করে:

চিত্র ৩. বাফারকিউ যোগাযোগ প্রক্রিয়া।
BufferQueue-তে এমন যুক্তি রয়েছে যা ইমেজ স্ট্রিম প্রযোজক এবং ইমেজ স্ট্রিম গ্রাহকদের একসাথে সংযুক্ত করে। ইমেজ প্রোডাক্টরের কিছু উদাহরণ হল ক্যামেরা HAL বা OpenGL ES গেম দ্বারা উৎপাদিত ক্যামেরা প্রিভিউ। ইমেজ গ্রাহকদের কিছু উদাহরণ হল SurfaceFlinger বা অন্য কোনও অ্যাপ যা OpenGL ES স্ট্রিম প্রদর্শন করে, যেমন ক্যামেরা অ্যাপ ক্যামেরা ভিউফাইন্ডার প্রদর্শন করে।
BufferQueue হল একটি ডেটা স্ট্রাকচার যা একটি বাফার পুলকে একটি কিউয়ের সাথে একত্রিত করে এবং প্রক্রিয়াগুলির মধ্যে বাফারগুলি পাস করার জন্য Binder ইন্টার-প্রসেস কমিউনিকেশন (IPC) ব্যবহার করে। প্রযোজক ইন্টারফেস, অথবা আপনি যে কাউকে গ্রাফিক বাফার তৈরি করতে চান তাকে যা পাস করেন, তা হল IGraphicBufferProducer ( SurfaceTexture এর অংশ)। BufferQueue প্রায়শই একটি সারফেসে রেন্ডার করতে এবং একটি GL কনজিউমারের সাথে কনজিউমার করতে ব্যবহৃত হয়, অন্যান্য কাজের মধ্যে।
বাফারকিউ তিনটি ভিন্ন মোডে কাজ করতে পারে:
এই কাজের বেশিরভাগ অংশ পরিচালনা করার জন্য, SurfaceFlinger কেবল আরেকটি OpenGL ES ক্লায়েন্ট হিসেবে কাজ করে। সুতরাং যখন SurfaceFlinger সক্রিয়ভাবে একটি বা দুটি বাফারকে তৃতীয়াংশে কম্পোজ করে, তখন এটি OpenGL ES ব্যবহার করে।
হার্ডওয়্যার কম্পোজার HAL বাকি অর্ধেক কাজ পরিচালনা করেন। এই HAL সমস্ত অ্যান্ড্রয়েড গ্রাফিক্স রেন্ডারিংয়ের কেন্দ্রীয় বিন্দু হিসেবে কাজ করে।