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

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

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

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

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

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

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