গ্রাফিক্স,গ্রাফিক্স,গ্রাফিক্স,গ্রাফিক্স

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

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

ক্যানভাস (সাধারণ শব্দ), Canvas (API উপাদান)
ক্যানভাস হলো একটি অঙ্কন পৃষ্ঠ যা একটি বিটম্যাপ বা একটি Surface অবজেক্টের বিপরীতে প্রকৃত বিটগুলির সংমিশ্রণ পরিচালনা করে। Canvas ক্লাসে বিটম্যাপ, রেখা, বৃত্ত, আয়তক্ষেত্র, পাঠ্য ইত্যাদির স্ট্যান্ডার্ড কম্পিউটার অঙ্কনের পদ্ধতি রয়েছে এবং এটি একটি বিটম্যাপ বা পৃষ্ঠের সাথে আবদ্ধ। ক্যানভাস হলো স্ক্রিনে 2D বস্তু আঁকার সবচেয়ে সহজ এবং সহজ উপায়। বেস ক্লাস হল Canvas
অঙ্কনযোগ্য
ড্রয়েবল হলো একটি কম্পাইল করা ভিজ্যুয়াল রিসোর্স যা ব্যাকগ্রাউন্ড, টাইটেল বা স্ক্রিনের অন্য অংশ হিসেবে ব্যবহার করা যেতে পারে। ড্রয়েবল সাধারণত অন্য UI এলিমেন্টে লোড করা হয়, যেমন ব্যাকগ্রাউন্ড ইমেজ। ড্রয়েবল ইভেন্ট গ্রহণ করতে পারে না, তবে অ্যানিমেশন অবজেক্ট বা ইমেজ লাইব্রেরির মতো সাবক্লাস সক্ষম করার জন্য স্টেট এবং শিডিউলিংয়ের মতো বিভিন্ন অন্যান্য বৈশিষ্ট্য নির্ধারণ করে। অনেক ড্রয়েবল অবজেক্ট ড্রয়েবল রিসোর্স ফাইল থেকে লোড করা হয় — XML বা বিটম্যাপ ফাইল যা ইমেজ বর্ণনা করে। ড্রয়েবল রিসোর্সগুলি android.graphics.drawable এর সাবক্লাসে কম্পাইল করা হয়। ড্রয়েবল এবং অন্যান্য রিসোর্স সম্পর্কে আরও তথ্যের জন্য, অ্যাপ রিসোর্স ওভারভিউ দেখুন।
লেআউট রিসোর্স
লেআউট রিসোর্স হলো একটি XML ফাইল যা একটি অ্যাক্টিভিটি স্ক্রিনের লেআউট বর্ণনা করে। আরও তথ্যের জন্য, লেআউট রিসোর্স দেখুন।
নাইন-প্যাচ (৯-প্যাচ, নাইনপ্যাচ)
নাইন-প্যাচ হল একটি আকার পরিবর্তনযোগ্য বিটম্যাপ রিসোর্স যা ডিভাইসের ব্যাকগ্রাউন্ড বা অন্যান্য ছবির জন্য ব্যবহার করা যেতে পারে। আরও তথ্যের জন্য, নাইন-প্যাচ দেখুন।
ওপেনজিএল ইএস
OpenGL ES হল 2D এবং 3D গ্রাফিক্স রেন্ডার করার জন্য একটি ক্রস-প্ল্যাটফর্ম API। হার্ডওয়্যার-অ্যাক্সিলারেটেড 3D রেন্ডারিংয়ের জন্য Android OpenGL ES লাইব্রেরি সরবরাহ করে। 2D রেন্ডারিংয়ের জন্য, একটি ক্যানভাস হল সহজ বিকল্প। OpenGL ES অ্যান্ড্রয়েড নেটিভ ডেভেলপমেন্ট কিট (NDK) তে উপলব্ধ। 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 (এপিআই উপাদান)
একটি ভিউ গ্রুপ চাইল্ড ভিউয়ের একটি সেটকে গোষ্ঠীবদ্ধ করে। ভিউ গ্রুপটি চাইল্ড ভিউ কোথায় স্থাপন করা হবে এবং কত বড় হতে পারে তা নির্ধারণ করার জন্য দায়ী, পাশাপাশি উপযুক্ত সময়ে প্রতিটিকে নিজেরাই আঁকতে বলার জন্যও দায়ী। কিছু ভিউ গ্রুপ অদৃশ্য এবং শুধুমাত্র লেআউটের জন্য, অন্যদের একটি অভ্যন্তরীণ UI থাকে, যেমন একটি স্ক্রলিং তালিকা বাক্স। ভিউ গ্রুপগুলি android.widget প্যাকেজে থাকে, তবে ViewGroup ক্লাসটি প্রসারিত করে।
শ্রেণিবিন্যাস দেখুন
ভিউ হায়ারার্কি হলো ভিউ এবং ভিউ গ্রুপ অবজেক্টের একটি বিন্যাস যা একটি অ্যাপের প্রতিটি উপাদানের জন্য ইউজার ইন্টারফেস নির্ধারণ করে। হায়ারার্কিতে ভিউ গ্রুপ থাকে যার মধ্যে এক বা একাধিক চাইল্ড ভিউ বা ভিউ গ্রুপ থাকে। আপনি অ্যান্ড্রয়েড এসডিকে সরবরাহ করা হাইয়ারার্কি ভিউয়ার ব্যবহার করে ডিবাগিং এবং অপ্টিমাইজেশনের জন্য ভিউ হায়ারার্কির একটি ভিজ্যুয়াল উপস্থাপনা পেতে পারেন।
ভলকান
Vulkan হল উচ্চ-কার্যক্ষমতা সম্পন্ন 3D গ্রাফিক্সের জন্য একটি লো-ওভারহেড ক্রস-প্ল্যাটফর্ম API।
উইজেট
উইজেট হলো সম্পূর্ণরূপে বাস্তবায়িত ভিউ সাবক্লাসের একটি সেট যা ফর্ম উপাদান এবং অন্যান্য UI উপাদান, যেমন একটি টেক্সট বক্স বা একটি পপআপ মেনু রেন্ডার করে। যেহেতু একটি উইজেট সম্পূর্ণরূপে বাস্তবায়িত, এটি পরিমাপ, নিজেকে অঙ্কন এবং স্ক্রিন ইভেন্টগুলিতে প্রতিক্রিয়া পরিচালনা করে। উইজেটগুলি 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 কনজিউমারের সাথে কনজিউমার করতে ব্যবহৃত হয়, অন্যান্য কাজের মধ্যে।

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

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

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

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