সারফেস, SurfaceHolder, EGLSurface, SurfaceView, GLSurfaceView, SurfaceTexture, TextureView, SurfaceFlinger ও Vulkan সম্পর্কে প্রত্যেক ডেভেলপারের কী জানা উচিত।
এই পৃষ্ঠায় Android সিস্টেম-লেভেল গ্রাফিক্স আর্কিটেকচারের প্রয়োজনীয় এলিমেন্ট এবং অ্যাপ ফ্রেমওয়ার্ক ও মাল্টিমিডিয়া সিস্টেম কীভাবে সেগুলি ব্যবহার করে তার বিবরণ দেওয়া আছে। গ্রাফিক্যাল ডেটার বাফার কীভাবে সিস্টেমের মধ্যে দিয়ে যায় সেটির উপর ফোকাস করা হয়। SurfaceView এবং TextureView কেন এমন আচরণ করে, অথবা কীভাবে সারফেস এবং EGLSurface ইন্টার্যাক্ট করে, সেই বিষয়ে জানতে চাইলে আপনি সঠিক জায়গায় এসেছেন।
Android ডিভাইস ও অ্যাপ ডেভেলপমেন্ট সম্পর্কে কিছু জ্ঞান আছে বলে ধরে নেওয়া হয়। আপনাকে অ্যাপ ফ্রেমওয়ার্ক সম্পর্কে বিস্তারিত জানতে হবে না এবং খুব কম API কল উল্লেখ করা আছে, কিন্তু কন্টেন্ট যেন অন্যান্য সর্বজনীন ডকুমেন্টের সাথে ওভারল্যাপ না করে। অ্যাপ ডিজাইন করার সময় আপনাকে যাতে সঠিক সিদ্ধান্ত নিতে সাহায্য করা যায়, সেই জন্য আউটপুটের জন্য ফ্রেম রেন্ডার করার সাথে যুক্ত গুরুত্বপূর্ণ ইভেন্টের বিবরণ প্রদান করাই হল লক্ষ্য। এটি অর্জন করতে, এই ডকুমেন্টটি নিচ থেকে উপরের দিকে কাজ করে, কীভাবে UI ক্লাস ব্যবহার করা যেতে পারে তার পরিবর্তে কীভাবে সেগুলি কাজ করে তা বর্ণনা করে।
এই বিভাগে ব্যাকগ্রাউন্ড মেটেরিয়াল থেকে শুরু করে HAL বিবরণ ও ব্যবহারের ধরন পর্যন্ত সবকিছু কভার করা একাধিক পৃষ্ঠা রয়েছে। এটি Android গ্রাফিক্স বাফার সম্পর্কিত ব্যাখ্যা দিয়ে শুরু হয়, কম্পোজিশন ও ডিসপ্লে মেকানিজম বর্ণনা করে, তারপর উচ্চ-স্তরের মেকানিজমের দিকে অগ্রসর হয় যা কম্পোজিটরকে ডেটা সাপ্লাই করে। আমরা সাজেস্ট করি যে, কোনও আকর্ষণীয় টপিক বেছে না নিয়ে, নিম্নলিখিত ক্রমে পৃষ্ঠাগুলি পড়ুন।
লো-লেভেল কম্পোনেন্ট
- BufferQueue এবং gralloc. BufferQueue এমন কিছুর সাথে কানেক্ট করে যা গ্রাফিক্যাল ডেটার বাফার জেনারেট করে (প্রোডিউসার) এবং এমন কিছুর সাথে কানেক্ট করে যা ডিসপ্লে বা আরও প্রসেস করার জন্য ডেটা গ্রহণ করে (কনজিউমার)। gralloc মেমরি অ্যালোকেটরের মাধ্যমে বাফার অ্যালোকেশন করা হয়, যা ভেন্ডর-নির্দিষ্ট HAL ইন্টারফেসের মাধ্যমে প্রয়োগ করা হয়।
- SurfaceFlinger, হার্ডওয়্যার কম্পোজার এবং ভার্চুয়াল ডিসপ্লে। SurfaceFlinger একাধিক সোর্স থেকে পাওয়া ডেটার বাফার গ্রহণ করে, সেগুলিকে কম্পোজিট করে এবং ডিসপ্লেতে পাঠায়। হার্ডওয়্যার কম্পোজার HAL (HWC) উপলভ্য হার্ডওয়্যারের সাথে কম্পোজিট বাফার করার সবচেয়ে কার্যকর উপায় নির্ধারণ করে এবং ভার্চুয়াল ডিসপ্লে কম্পোজিট করা আউটপুটকে সিস্টেমের মধ্যে উপলভ্য করে (স্ক্রিন রেকর্ড করা বা নেটওয়ার্কের মাধ্যমে স্ক্রিন পাঠানো)।
- Surface, canvas এবং SurfaceHolder. একটি সারফেস বাফার কিউ তৈরি করে যা প্রায়ই SurfaceFlinger দ্বারা ব্যবহার করা হয়। কোনও সারফেসে রেন্ডার করার সময়, ফলাফল একটি বাফারে শেষ হয় যা গ্রাহককে পাঠানো হয়। ক্যানভাস API, সারফেসে সরাসরি ড্র করার জন্য (OpenGL ES-এর লো-লেভেল বিকল্প) সফ্টওয়্যার ইমপ্লিমেন্টেশন (হার্ডওয়্যার-অ্যাক্সিলারেশন সহায়তা সহ) প্রদান করে। ভিউয়ের সাথে সম্পর্কিত যেকোনও কিছুর মধ্যে একটি SurfaceHolder থাকে, যার API সাইজ ও ফর্ম্যাটের মতো সারফেস প্যারামিটার পাওয়া ও সেট করার সুবিধা দেয়।
- EGLSurface এবং OpenGL ES. OpenGL ES (GLES) গ্রাফিক্স-রেন্ডারিং API-কে সংজ্ঞায়িত করে যা EGL-এর সাথে একত্রিত করার জন্য ডিজাইন করা হয়েছে, এটি এমন একটি লাইব্রেরি যা অপারেটিং সিস্টেমের মাধ্যমে উইন্ডো তৈরি এবং অ্যাক্সেস করতে পারে (টেক্সচার্ড পলিগন আঁকতে, GLES কল ব্যবহার করুন; স্ক্রিনে রেন্ডারিং করতে, EGL কল ব্যবহার করুন)। এছাড়াও, এই পৃষ্ঠায় ANativeWindow, নেটিভ কোড থেকে EGL উইন্ডো সারফেস তৈরি করতে ব্যবহৃত Java Surface ক্লাসের C/C++ সমতুল্য বিষয়গুলিও অন্তর্ভুক্ত রয়েছে।
- Vulkan. Vulkan হল হাই-পারফর্ম্যান্স 3D গ্রাফিক্সের জন্য একটি লো-ওভারহেড, ক্রস-প্ল্যাটফর্ম API। OpenGL ES-এর মতো, Vulkan অ্যাপে খুব ভালো কোয়ালিটির, রিয়েল-টাইম গ্রাফিক্স তৈরি করার জন্য টুল প্রদান করে। Vulkan-এর সুবিধাগুলির মধ্যে CPU ওভারহেড কমানো এবং SPIR-V বাইনারি ইন্টারমিডিয়েট ভাষার জন্য সহায়তা অন্তর্ভুক্ত।
উচ্চ-স্তরের কম্পোনেন্ট
- SurfaceView এবং GLSurfaceView. SurfaceView, সারফেস ও ভিউয়ের সমন্বয় ঘটায়। SurfaceView-এর ভিউ কম্পোনেন্টগুলি SurfaceFlinger (এবং অ্যাপ নয়) দ্বারা কম্পোজিট করা হয়, যা আলাদা থ্রেড/প্রসেস থেকে রেন্ডারিং এবং অ্যাপ UI রেন্ডারিং থেকে আইসোলেশনকে সক্ষম করে। GLSurfaceView, EGL কনটেক্সট, ইন্টারথ্রেড কমিউনিকেশন এবং অ্যাক্টিভিটি লাইফসাইকেলের সাথে ইন্টার্যাকশন ম্যানেজ করার জন্য হেল্পার ক্লাস প্রদান করে (তবে GLES ব্যবহার করার জন্য প্রয়োজন হয় না)।
- SurfaceTexture. SurfaceTexture, একটি সারফেস ও GLES টেক্সচারকে একত্রিত করে এমন একটি BufferQueue তৈরি করে যার কনজিউমার হল আপনার অ্যাপ। প্রোডিউসার নতুন বাফার সারিবদ্ধ করলে, এটি আপনার অ্যাপকে বিজ্ঞপ্তি দেয়, যা পরিবর্তে আগে থেকে থাকা বাফার রিলিজ করে, সারি থেকে নতুন বাফার গ্রহণ করে এবং GLES-এ এক্সটার্নাল টেক্সচার হিসেবে বাফার উপলভ্য করতে EGL কল করে। Android 7.0-এ সুরক্ষিত টেক্সচার ভিডিও প্লেব্যাকের জন্য সহায়তা যোগ করা হয়েছে, যা সুরক্ষিত ভিডিও কন্টেন্টের GPU পোস্ট-প্রসেসিং চালু করে।
- TextureView। TextureView, SurfaceTexture-এর সাথে একটি ভিউকে একত্রিত করে। TextureView একটি SurfaceTexture-কে র্যাপ করে এবং কলব্যাক ও নতুন বাফার পাওয়ার জন্য উত্তর দেওয়ার দায়িত্ব নেয়। ড্র করার সময়, TextureView তার ডেটা সোর্স হিসেবে সবচেয়ে সাম্প্রতিক প্রাপ্ত বাফারের কন্টেন্ট ব্যবহার করে, ভিউ স্টেট যেখানে এবং যেভাবে দেখানো উচিত বলে ইঙ্গিত করে, সেখানে এবং সেইভাবে রেন্ডার করে। ভিউ কম্পোজিশন সবসময় GLES-এর মাধ্যমে করা হয়, যার অর্থ হল কন্টেন্ট আপডেট করলে অন্যান্য ভিউ এলিমেন্টও আবার আঁকা হতে পারে।