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