গ্রাফিক্স আর্কিটেকচার

প্রতিটি ডেভেলপারের সারফেস, সারফেসহোল্ডার, ইজিএলসারফেস, সারফেসভিউ, জিএলসারফেসভিউ, সারফেসটেক্সচার, টেক্সচারভিউ, সারফেসফ্লিংগার এবং ভলকান সম্পর্কে যা জানা উচিত।

এই পৃষ্ঠাটি অ্যান্ড্রয়েড সিস্টেম-স্তরের গ্রাফিক্স আর্কিটেকচারের অপরিহার্য উপাদানগুলি এবং অ্যাপ ফ্রেমওয়ার্ক এবং মাল্টিমিডিয়া সিস্টেম কীভাবে সেগুলি ব্যবহার করে তা বর্ণনা করে। গ্রাফিকাল ডেটার বাফারগুলি সিস্টেমের মধ্য দিয়ে কীভাবে চলাচল করে তার উপর ফোকাস করা হয়েছে। আপনি যদি কখনও ভেবে থাকেন যে SurfaceView এবং TextureView কেন এইভাবে আচরণ করে, অথবা Surfaces এবং EGLSurface কীভাবে ইন্টারঅ্যাক্ট করে, তাহলে আপনি সঠিক জায়গায় এসেছেন।

অ্যান্ড্রয়েড ডিভাইস এবং অ্যাপ ডেভেলপমেন্টের সাথে কিছুটা পরিচিতি ধরে নেওয়া হচ্ছে। অ্যাপ ফ্রেমওয়ার্ক সম্পর্কে আপনার বিস্তারিত জ্ঞানের প্রয়োজন নেই এবং খুব কম API কল উল্লেখ করা হয়েছে, তবে উপাদানটি অন্যান্য পাবলিক ডকুমেন্টেশনের সাথে ওভারল্যাপ করে না। লক্ষ্য হল আউটপুটের জন্য একটি ফ্রেম রেন্ডার করার সাথে জড়িত গুরুত্বপূর্ণ ঘটনাগুলির বিশদ বিবরণ প্রদান করা যাতে আপনি একটি অ্যাপ ডিজাইন করার সময় সচেতন সিদ্ধান্ত নিতে পারেন। এটি অর্জনের জন্য, এই ডকুমেন্টটি নিচ থেকে উপরে কাজ করে, UI ক্লাসগুলি কীভাবে কাজ করে তা বর্ণনা করে, সেগুলি কীভাবে ব্যবহার করা যেতে পারে তার চেয়ে।

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

নিম্ন-স্তরের উপাদান

  • BufferQueue এবং gralloc । BufferQueue এমন কিছুকে সংযুক্ত করে যা গ্রাফিক্যাল ডেটার বাফার তৈরি করে ( প্রযোজক ) এমন কিছুর সাথে যা প্রদর্শন বা আরও প্রক্রিয়াকরণের জন্য ডেটা গ্রহণ করে ( ভোক্তা )। বাফার বরাদ্দকরণ একটি বিক্রেতা-নির্দিষ্ট HAL ইন্টারফেসের মাধ্যমে বাস্তবায়িত gralloc মেমরি বরাদ্দকারীর মাধ্যমে সম্পাদিত হয়।
  • সারফেসফ্লিঙ্গার, হার্ডওয়্যার কম্পোজার এবং ভার্চুয়াল ডিসপ্লে । সারফেসফ্লিঙ্গার একাধিক উৎস থেকে ডেটার বাফার গ্রহণ করে, সেগুলিকে কম্পোজিট করে এবং ডিসপ্লেতে পাঠায়। হার্ডওয়্যার কম্পোজার HAL (HWC) উপলব্ধ হার্ডওয়্যারের সাথে কম্পোজিট বাফারের সবচেয়ে কার্যকর উপায় নির্ধারণ করে এবং ভার্চুয়াল ডিসপ্লে সিস্টেমের মধ্যে কম্পোজিট আউটপুট উপলব্ধ করে (স্ক্রিন রেকর্ড করা বা নেটওয়ার্কের মাধ্যমে স্ক্রিন পাঠানো)।
  • সারফেস, ক্যানভাস এবং সারফেসহোল্ডার । একটি সারফেস একটি বাফার কিউ তৈরি করে যা প্রায়শই সারফেসফ্লিংগার দ্বারা ব্যবহৃত হয়। একটি সারফেসে রেন্ডার করার সময়, ফলাফলটি একটি বাফারে পরিণত হয় যা গ্রাহকের কাছে পাঠানো হয়। ক্যানভাস API গুলি সরাসরি একটি সারফেসে অঙ্কন করার জন্য একটি সফ্টওয়্যার বাস্তবায়ন (হার্ডওয়্যার-ত্বরণ সমর্থন সহ) প্রদান করে (OpenGL ES এর নিম্ন-স্তরের বিকল্প)। একটি ভিউয়ের সাথে সম্পর্কিত যেকোনো কিছুতে একটি সারফেসহোল্ডার জড়িত, যার API গুলি আকার এবং বিন্যাসের মতো সারফেস প্যারামিটারগুলি পেতে এবং সেট করতে সক্ষম করে।
  • EGLSurface এবং OpenGL ESOpenGL ES (GLES) একটি গ্রাফিক্স-রেন্ডারিং API সংজ্ঞায়িত করে যা EGL এর সাথে একত্রিত করার জন্য ডিজাইন করা হয়েছে, একটি লাইব্রেরি যা অপারেটিং সিস্টেমের মাধ্যমে উইন্ডোজ তৈরি এবং অ্যাক্সেস করতে পারে (টেক্সচার্ড বহুভুজ আঁকতে, GLES কল ব্যবহার করতে; স্ক্রিনে রেন্ডারিং রাখতে, EGL কল ব্যবহার করতে)। এই পৃষ্ঠাটি ANativeWindow-কেও কভার করে, যা জাভা সারফেস ক্লাসের C/C++ সমতুল্য যা নেটিভ কোড থেকে একটি EGL উইন্ডো সারফেস তৈরি করতে ব্যবহৃত হয়।
  • Vulkan । Vulkan হল উচ্চ-কার্যক্ষমতা সম্পন্ন 3D গ্রাফিক্সের জন্য একটি নিম্ন-ওভারহেড, ক্রস-প্ল্যাটফর্ম API। OpenGL ES এর মতো, Vulkan অ্যাপগুলিতে উচ্চ-মানের, রিয়েল-টাইম গ্রাফিক্স তৈরির জন্য সরঞ্জাম সরবরাহ করে। Vulkan এর সুবিধার মধ্যে রয়েছে CPU ওভারহেড হ্রাস এবং SPIR-V বাইনারি ইন্টারমিডিয়েট ভাষার জন্য সমর্থন।

উচ্চ-স্তরের উপাদান

  • SurfaceView এবং GLSurfaceView । SurfaceView একটি surface এবং একটি view কে একত্রিত করে। SurfaceView এর view উপাদানগুলি SurfaceFlinger (এবং অ্যাপ নয়) দ্বারা কম্পোজিট করা হয়, যা একটি পৃথক থ্রেড/প্রক্রিয়া থেকে রেন্ডারিং এবং অ্যাপ UI রেন্ডারিং থেকে বিচ্ছিন্নকরণ সক্ষম করে। GLSurfaceView EGL প্রসঙ্গ, ইন্টারথ্রেড যোগাযোগ এবং কার্যকলাপ জীবনচক্রের সাথে মিথস্ক্রিয়া পরিচালনা করার জন্য সহায়ক ক্লাস সরবরাহ করে (কিন্তু GLES ব্যবহার করার জন্য এটি প্রয়োজন হয় না)।
  • SurfaceTexture । SurfaceTexture একটি পৃষ্ঠ এবং GLES টেক্সচারকে একত্রিত করে একটি BufferQueue তৈরি করে যার জন্য আপনার অ্যাপটি গ্রাহক। যখন কোনও প্রযোজক একটি নতুন বাফার সারিবদ্ধ করে, তখন এটি আপনার অ্যাপটিকে অবহিত করে, যা পূর্বে ধারণ করা বাফারটি প্রকাশ করে, সারি থেকে নতুন বাফারটি অর্জন করে এবং GLES-এর কাছে একটি বহিরাগত টেক্সচার হিসাবে বাফারটি উপলব্ধ করার জন্য EGL কল করে। Android 7.0 সুরক্ষিত টেক্সচার ভিডিও প্লেব্যাকের জন্য সমর্থন যোগ করেছে যা সুরক্ষিত ভিডিও সামগ্রীর GPU পোস্ট-প্রসেসিং সক্ষম করে।
  • TextureView । TextureView একটি ভিউকে একটি SurfaceTexture এর সাথে একত্রিত করে। TextureView একটি SurfaceTexture কে মোড়ানোর কাজ করে এবং কলব্যাকের প্রতিক্রিয়া জানানো এবং নতুন বাফার অর্জনের দায়িত্ব নেয়। অঙ্কন করার সময়, TextureView সাম্প্রতিক প্রাপ্ত বাফারের বিষয়বস্তুকে তার ডেটা উৎস হিসেবে ব্যবহার করে, যেখানেই এবং যেভাবেই ভিউ স্টেট নির্দেশ করে সেখানেই রেন্ডার করে। ভিউ কম্পোজিশন সর্বদা GLES দিয়ে সঞ্চালিত হয়, যার অর্থ বিষয়বস্তু আপডেট করার ফলে অন্যান্য ভিউ উপাদানগুলিও পুনরায় অঙ্কিত হতে পারে।