গ্রাফিক্স

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

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

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

অ্যাপ ডেভেলপাররা তিনটি উপায়ে স্ক্রিনে ছবি আঁকে: ক্যানভাস , ওপেনজিএল ইএস , বা ভলকান

অ্যান্ড্রয়েড গ্রাফিক্স উপাদান

এপিআই ডেভেলপাররা যে রেন্ডারিং ব্যবহার করেন তা কোন ব্যাপার না, সবকিছুই একটি সারফেসে রেন্ডার করা হয়। পৃষ্ঠটি একটি বাফার সারির প্রযোজক পক্ষের প্রতিনিধিত্ব করে যা প্রায়শই SurfaceFlinger দ্বারা গ্রাস করা হয়। অ্যান্ড্রয়েড প্ল্যাটফর্মে তৈরি প্রতিটি উইন্ডো একটি পৃষ্ঠ দ্বারা সমর্থিত। রেন্ডার করা সমস্ত দৃশ্যমান পৃষ্ঠতল সারফেসফ্লিংগার দ্বারা ডিসপ্লেতে সংমিশ্রিত হয়।

নিম্নলিখিত চিত্রটি দেখায় কিভাবে মূল উপাদানগুলি একসাথে কাজ করে:

ইমেজ রেন্ডারিং উপাদান

চিত্র 1. কিভাবে পৃষ্ঠতল রেন্ডার করা হয়.

প্রধান উপাদান নীচে বর্ণনা করা হয়:

ইমেজ স্ট্রিম প্রযোজক

একটি ইমেজ স্ট্রিম প্রযোজক এমন কিছু হতে পারে যা ব্যবহারের জন্য গ্রাফিক বাফার তৈরি করে। উদাহরণগুলির মধ্যে OpenGL ES, Canvas 2D এবং মিডিয়াসার্ভার ভিডিও ডিকোডার অন্তর্ভুক্ত।

ইমেজ স্ট্রিম ভোক্তাদের

ইমেজ স্ট্রীমের সবচেয়ে সাধারণ ভোক্তা হল SurfaceFlinger, সিস্টেম পরিষেবা যা বর্তমানে দৃশ্যমান সারফেস ব্যবহার করে এবং উইন্ডো ম্যানেজার দ্বারা প্রদত্ত তথ্য ব্যবহার করে ডিসপ্লেতে কম্পোজ করে। SurfaceFlinger হল একমাত্র পরিষেবা যা প্রদর্শনের বিষয়বস্তু পরিবর্তন করতে পারে। সারফেসফ্লিংগার ওপেনজিএল এবং হার্ডওয়্যার কম্পোজার ব্যবহার করে সারফেসের একটি গ্রুপ রচনা করতে।

অন্যান্য OpenGL ES অ্যাপগুলি ইমেজ স্ট্রীমও ব্যবহার করতে পারে, যেমন ক্যামেরা অ্যাপ ক্যামেরা প্রিভিউ ইমেজ স্ট্রিম ব্যবহার করে। নন-GL অ্যাপগুলিও গ্রাহক হতে পারে, উদাহরণস্বরূপ ImageReader ক্লাস।

হার্ডওয়্যার কম্পোজার

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

হার্ডওয়্যার কম্পোজার এইচএএল বাকি অর্ধেক কাজ পরিচালনা করে এবং এটি সমস্ত অ্যান্ড্রয়েড গ্রাফিক্স রেন্ডারিংয়ের কেন্দ্রবিন্দু। হার্ডওয়্যার কম্পোজারকে অবশ্যই ইভেন্টগুলি সমর্থন করতে হবে, যার মধ্যে একটি হল VSYNC (অন্যটি হল প্লাগ-এন্ড-প্লেএইচডিএমআই সমর্থনের জন্য হটপ্লাগ)।

গ্র্যালোক

ইমেজ নির্মাতাদের অনুরোধ করা মেমরি বরাদ্দ করার জন্য গ্রাফিক্স মেমরি অ্যালোকেটর (Gralloc) প্রয়োজন। বিস্তারিত জানার জন্য, Gralloc HAL দেখুন।

তথ্য প্রবাহ

অ্যান্ড্রয়েড গ্রাফিক্স পাইপলাইনের চিত্রের জন্য নিম্নলিখিত চিত্রটি দেখুন:

গ্রাফিক্স ডেটা প্রবাহ

চিত্র 2. Android এর মাধ্যমে গ্রাফিক ডেটা প্রবাহ

বাম দিকের অবজেক্টগুলি হল রেন্ডারার যারা গ্রাফিক্স বাফার তৈরি করে, যেমন হোম স্ক্রীন, স্ট্যাটাস বার এবং সিস্টেম UI। সারফেসফ্লিংগার কম্পোজিটর এবং হার্ডওয়্যার কম্পোজার হল কম্পোজার।

বাফার সারি

বাফার কিউ অ্যান্ড্রয়েড গ্রাফিক্স উপাদানগুলির মধ্যে আঠা প্রদান করে। এগুলি একজোড়া সারি যা প্রযোজক থেকে ভোক্তা পর্যন্ত বাফারগুলির ধ্রুবক চক্রের মধ্যস্থতা করে৷ একবার প্রযোজকরা তাদের বাফারগুলি বন্ধ করে দিলে, সারফেসফ্লিংগার ডিসপ্লেতে সমস্ত কিছু সংমিশ্রণের জন্য দায়ী।

BufferQueue যোগাযোগ প্রক্রিয়ার জন্য নিম্নলিখিত চিত্রটি দেখুন।

বাফার কিউ যোগাযোগ প্রক্রিয়া

চিত্র 3. বাফার কিউ যোগাযোগ প্রক্রিয়া

BufferQueue-তে এমন যুক্তি রয়েছে যা ইমেজ স্ট্রিম প্রযোজক এবং ইমেজ স্ট্রিম ভোক্তাদের একত্রে আবদ্ধ করে। ছবি নির্মাতাদের কিছু উদাহরণ হল ক্যামেরা HAL বা OpenGL ES গেম দ্বারা উত্পাদিত ক্যামেরা প্রিভিউ। ইমেজ গ্রাহকদের কিছু উদাহরণ হল SurfaceFlinger বা অন্য একটি অ্যাপ যা একটি OpenGL ES স্ট্রিম প্রদর্শন করে, যেমন ক্যামেরা অ্যাপ ক্যামেরা ভিউফাইন্ডার প্রদর্শন করে।

BufferQueue হল একটি ডেটা স্ট্রাকচার যা একটি বাফার পুলকে একটি সারির সাথে একত্রিত করে এবং প্রক্রিয়াগুলির মধ্যে বাফারগুলি পাস করতে বাইন্ডার আইপিসি ব্যবহার করে। প্রযোজক ইন্টারফেস, বা আপনি গ্রাফিক বাফার তৈরি করতে চান এমন কাউকে যা পাস করেন তা হল IGraphicBufferProducer ( সারফেসটেক্সচারের অংশ)। BufferQueue প্রায়শই একটি সারফেসে রেন্ডার করতে এবং অন্যান্য কাজের মধ্যে একটি GL গ্রাহকের সাথে ব্যবহার করতে ব্যবহৃত হয়।

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

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

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

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

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

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