
অ্যান্ড্রয়েড ফ্রেমওয়ার্ক 2D এবং 3D এর জন্য বিভিন্ন ধরণের গ্রাফিক্স রেন্ডারিং API অফার করে যা গ্রাফিক্স ড্রাইভারগুলির প্রস্তুতকারকের বাস্তবায়নের সাথে ইন্টারঅ্যাক্ট করে, তাই সেই APIগুলি কীভাবে উচ্চ স্তরে কাজ করে সে সম্পর্কে ভাল ধারণা থাকা গুরুত্বপূর্ণ। এই পৃষ্ঠাটি গ্রাফিক্স হার্ডওয়্যার অ্যাবস্ট্রাকশন লেয়ার (HAL) পরিচয় করিয়ে দেয় যেটি ড্রাইভারগুলি তৈরি করা হয়েছে। এই বিভাগটি চালিয়ে যাওয়ার আগে, নিম্নলিখিত পদগুলির সাথে নিজেকে পরিচিত করুন:
Canvas
(এপিআই উপাদান)Surface
বস্তুর বিরুদ্ধে প্রকৃত বিটগুলির সংমিশ্রণ পরিচালনা করে। Canvas
ক্লাসে বিটম্যাপ, লাইন, বৃত্ত, আয়তক্ষেত্র, টেক্সট ইত্যাদির স্ট্যান্ডার্ড কম্পিউটার অঙ্কনের পদ্ধতি রয়েছে এবং এটি একটি বিটম্যাপ বা পৃষ্ঠের সাথে আবদ্ধ। একটি ক্যানভাস হল পর্দায় 2D বস্তু আঁকার সবচেয়ে সহজ, সহজ উপায়। বেস ক্লাস হল 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
ক্লাস বাস্তবায়ন করতে হবে না বা আপনার অ্যাপে উইন্ডোজ ব্যবহার করতে হবে না।অ্যাপ ডেভেলপাররা তিনটি উপায়ে স্ক্রিনে ছবি আঁকে: ক্যানভাস , ওপেনজিএল ইএস , বা ভলকান ।
অ্যান্ড্রয়েড গ্রাফিক্স উপাদান
এপিআই ডেভেলপাররা যে রেন্ডারিং ব্যবহার করেন তা কোন ব্যাপার না, সবকিছুই একটি সারফেসে রেন্ডার করা হয়। পৃষ্ঠটি একটি বাফার সারির প্রযোজক পক্ষের প্রতিনিধিত্ব করে যা প্রায়শই SurfaceFlinger দ্বারা গ্রাস করা হয়। অ্যান্ড্রয়েড প্ল্যাটফর্মে তৈরি প্রতিটি উইন্ডো একটি পৃষ্ঠ দ্বারা সমর্থিত। রেন্ডার করা সমস্ত দৃশ্যমান পৃষ্ঠতল সারফেসফ্লিংগার দ্বারা ডিসপ্লেতে সংমিশ্রিত হয়।
নিম্নলিখিত চিত্রটি দেখায় কিভাবে মূল উপাদানগুলি একসাথে কাজ করে:
চিত্র 1. কিভাবে পৃষ্ঠতল রেন্ডার করা হয়.
প্রধান উপাদানগুলি নিম্নলিখিত বিভাগে বর্ণিত হয়েছে।
ইমেজ স্ট্রিম প্রযোজক
একটি ইমেজ স্ট্রিম প্রযোজক এমন কিছু হতে পারে যা ব্যবহারের জন্য গ্রাফিক বাফার তৈরি করে। উদাহরণগুলির মধ্যে OpenGL ES, Canvas 2D এবং মিডিয়াসার্ভার ভিডিও ডিকোডার অন্তর্ভুক্ত।
ইমেজ স্ট্রিম ভোক্তাদের
ইমেজ স্ট্রীমের সবচেয়ে সাধারণ ভোক্তা হল SurfaceFlinger, সিস্টেম পরিষেবা যা বর্তমানে দৃশ্যমান সারফেস ব্যবহার করে এবং উইন্ডো ম্যানেজার দ্বারা প্রদত্ত তথ্য ব্যবহার করে ডিসপ্লেতে কম্পোজ করে। SurfaceFlinger হল একমাত্র পরিষেবা যা প্রদর্শনের বিষয়বস্তু পরিবর্তন করতে পারে। সারফেসফ্লিংগার ওপেনজিএল এবং হার্ডওয়্যার কম্পোজার (এইচডব্লিউসি) ব্যবহার করে সারফেসগুলির একটি গ্রুপ রচনা করতে।
অন্যান্য OpenGL ES অ্যাপগুলি ইমেজ স্ট্রীমও ব্যবহার করতে পারে, যেমন ক্যামেরা অ্যাপ ক্যামেরা প্রিভিউ ইমেজ স্ট্রিম ব্যবহার করে। নন-GL অ্যাপগুলিও গ্রাহক হতে পারে, উদাহরণস্বরূপ ImageReader ক্লাস।
হার্ডওয়্যার কম্পোজার
ডিসপ্লে সাবসিস্টেমের জন্য হার্ডওয়্যার বিমূর্ততা। সারফেসফ্লিংগার ওপেনজিএল এবং জিপিইউ থেকে কাজ অফলোড করার জন্য HWC-কে নির্দিষ্ট রচনার কাজ অর্পণ করতে পারে। SurfaceFlinger শুধুমাত্র অন্য OpenGL ES ক্লায়েন্ট হিসাবে কাজ করে। সুতরাং যখন সারফেসফ্লিঙ্গার সক্রিয়ভাবে এক বাফারকে তৃতীয়তে কম্পোজ করছে, উদাহরণস্বরূপ, এটি OpenGL ES ব্যবহার করছে। এটি GPU-এর সমস্ত গণনা পরিচালনা করার চেয়ে কম শক্তি কম্পোজিং করে।
হার্ডওয়্যার কম্পোজার এইচএএল বাকি অর্ধেক কাজ পরিচালনা করে এবং এটি সমস্ত অ্যান্ড্রয়েড গ্রাফিক্স রেন্ডারিংয়ের কেন্দ্রবিন্দু। HWC অবশ্যই ইভেন্টগুলিকে সমর্থন করবে, যার মধ্যে একটি হল VSync (অন্যটি হল প্লাগ-এন্ড-প্লে HDMI সমর্থনের জন্য হটপ্লাগ)।
গ্র্যালোক
ইমেজ নির্মাতাদের অনুরোধ করা মেমরি বরাদ্দ করার জন্য গ্রাফিক্স মেমরি অ্যালোকেটর (Gralloc) প্রয়োজন। বিস্তারিত জানার জন্য, BufferQueue এবং Gralloc দেখুন।
ডেটা প্রবাহ
নিম্নলিখিত চিত্রটি Android গ্রাফিক্স পাইপলাইন চিত্রিত করে:
চিত্র 2. Android এর মাধ্যমে গ্রাফিক ডেটা প্রবাহ।
বাম দিকের অবজেক্টগুলি হল রেন্ডারার যারা গ্রাফিক্স বাফার তৈরি করে, যেমন হোম স্ক্রীন, স্ট্যাটাস বার এবং সিস্টেম UI। SurfaceFlinger হল কম্পোজিটর এবং HWC হল কম্পোজার।
বাফার সারি
বাফার কিউ অ্যান্ড্রয়েড গ্রাফিক্স উপাদানগুলির মধ্যে আঠা প্রদান করে। এগুলি একজোড়া সারি যা প্রযোজক থেকে ভোক্তা পর্যন্ত বাফারগুলির ধ্রুবক চক্রের মধ্যস্থতা করে৷ প্রযোজকরা তাদের বাফারগুলি হস্তান্তর করার পরে, সারফেসফ্লিঙ্গার ডিসপ্লেতে সমস্ত কিছু সংমিশ্রণের জন্য দায়ী।
নিম্নলিখিত চিত্রটি বাফার কিউ যোগাযোগ প্রক্রিয়াকে চিত্রিত করে:
চিত্র 3. বাফার কিউ যোগাযোগ প্রক্রিয়া।
BufferQueue-তে এমন যুক্তি রয়েছে যা ইমেজ স্ট্রিম প্রযোজক এবং ইমেজ স্ট্রিম ভোক্তাদের একত্রে আবদ্ধ করে। ছবি নির্মাতাদের কিছু উদাহরণ হল ক্যামেরা HAL বা OpenGL ES গেম দ্বারা উত্পাদিত ক্যামেরা প্রিভিউ। ইমেজ গ্রাহকদের কিছু উদাহরণ হল SurfaceFlinger বা অন্য একটি অ্যাপ যা একটি OpenGL ES স্ট্রিম প্রদর্শন করে, যেমন ক্যামেরা অ্যাপ ক্যামেরা ভিউফাইন্ডার প্রদর্শন করে।
BufferQueue হল একটি ডেটা স্ট্রাকচার যা একটি বাফার পুলকে একটি সারির সাথে একত্রিত করে এবং প্রক্রিয়াগুলির মধ্যে বাফারগুলি পাস করতে বাইন্ডার আইপিসি ব্যবহার করে। প্রযোজক ইন্টারফেস, বা আপনি গ্রাফিক বাফার তৈরি করতে চান এমন কাউকে যা পাস করেন তা হল IGraphicBufferProducer
( SurfaceTexture
অংশ)। BufferQueue প্রায়শই একটি সারফেসে রেন্ডার করতে এবং অন্যান্য কাজের মধ্যে একটি GL গ্রাহকের সাথে ব্যবহার করতে ব্যবহৃত হয়।
BufferQueue তিনটি ভিন্ন মোডে কাজ করতে পারে:
এই কাজের বেশিরভাগ পরিচালনা করতে, SurfaceFlinger অন্য OpenGL ES ক্লায়েন্ট হিসাবে কাজ করে। সুতরাং যখন সারফেসফ্লিঙ্গার সক্রিয়ভাবে এক বাফারকে তৃতীয়তে কম্পোজ করছে, উদাহরণস্বরূপ, এটি OpenGL ES ব্যবহার করছে।
হার্ডওয়্যার কম্পোজার HAL বাকি অর্ধেক কাজ পরিচালনা করে। এই এইচএএল সমস্ত অ্যান্ড্রয়েড গ্রাফিক্স রেন্ডারিংয়ের কেন্দ্রীয় পয়েন্ট হিসাবে কাজ করে।