EGLSsurfaces এবং OpenGL ES

গ্রাফিক্স রেন্ডার করার জন্য অ্যান্ড্রয়েড OpenGL ES (GLES) API ব্যবহার করে। GLES কনটেক্সট তৈরি করতে এবং GLES রেন্ডারিংয়ের জন্য একটি উইন্ডোিং সিস্টেম প্রদান করতে, অ্যান্ড্রয়েড EGL লাইব্রেরি ব্যবহার করে। GLES রেন্ডার টেক্সচার্ড পলিগনকে কল করে, যখন EGL স্ক্রিনে পুট রেন্ডারিংকে কল করে।

GLES দিয়ে আঁকার আগে, আপনাকে একটি GL প্রসঙ্গ তৈরি করতে হবে। EGL-এ, এর অর্থ হল একটি EGLContext এবং একটি EGLSurface তৈরি করা। GLES ক্রিয়াকলাপগুলি বর্তমান প্রসঙ্গটিতে প্রযোজ্য, যা আর্গুমেন্ট হিসাবে পাস করার পরিবর্তে থ্রেড-স্থানীয় স্টোরেজের মাধ্যমে অ্যাক্সেস করা হয়। রেন্ডারিং কোডটি UI থ্রেডে নয়, একটি GLES থ্রেডে কার্যকর করা উচিত।

EGLপৃষ্ঠতল

EGLSurface হল EGL দ্বারা বরাদ্দকৃত একটি অফ-স্ক্রিন বাফার, যাকে pbuffer বলা হয়, অথবা অপারেটিং সিস্টেম দ্বারা বরাদ্দকৃত একটি উইন্ডো। eglCreateWindowSurface() ফাংশনটি কল করলে EGL উইন্ডো সারফেস তৈরি হয়। eglCreateWindowSurface() একটি উইন্ডো অবজেক্টকে আর্গুমেন্ট হিসেবে নেয়, যা অ্যান্ড্রয়েডে একটি সারফেস। একটি সারফেস হল BufferQueue এর প্রযোজক দিক। Consumers , যা SurfaceView, SurfaceTexture, TextureView, অথবা ImageReader, তারা সারফেস তৈরি করে। যখন আপনি eglCreateWindowSurface() কল করেন, EGL একটি নতুন EGLSurface অবজেক্ট তৈরি করে এবং এটিকে উইন্ডো অবজেক্টের BufferQueue এর প্রযোজক ইন্টারফেসের সাথে সংযুক্ত করে। সেই বিন্দু থেকে, সেই EGLSurface-এ রেন্ডারিং একটি বাফারকে ডিকিউ করে, এতে রেন্ডার করে এবং ভোক্তার ব্যবহারের জন্য এটিকে সারিবদ্ধ করে।

EGL লক/আনলক কল প্রদান করে না। ড্রয়িং কমান্ড ইস্যু করে এবং তারপর বর্তমান ফ্রেম জমা দেওয়ার জন্য eglSwapBuffers() কল করে। পদ্ধতির নামটি সামনের এবং পিছনের বাফারের ঐতিহ্যবাহী সোয়াপ থেকে এসেছে, তবে প্রকৃত বাস্তবায়ন ভিন্ন হতে পারে।

একবারে শুধুমাত্র একটি EGLSurface একটি পৃষ্ঠের সাথে সংযুক্ত করা যেতে পারে (আপনি শুধুমাত্র একটি প্রযোজককে একটি BufferQueue এর সাথে সংযুক্ত করতে পারেন), কিন্তু যদি আপনি EGLSurfaceটি ধ্বংস করেন তবে এটি BufferQueue থেকে সংযোগ বিচ্ছিন্ন হয়ে যায় এবং অন্য কিছুকে সংযুক্ত হতে দেয়।

একটি প্রদত্ত থ্রেড বর্তমান কী তা পরিবর্তন করে একাধিক EGLSurface-এর মধ্যে স্যুইচ করতে পারে। একটি EGLSurface একবারে শুধুমাত্র একটি থ্রেডে বর্তমান থাকতে হবে।

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

OpenGL ES এবং EGL প্রয়োজনীয়তার জন্য Android Compatibility Definition Document দেখুন।

ANativeWindow সম্পর্কে

পাবলিক সারফেস ক্লাসটি জাভা প্রোগ্রামিং ল্যাঙ্গুয়েজে বাস্তবায়িত হয়। C/C++ এ এর ​​সমতুল্য হল ANativeWindow ক্লাস, যা Android NDK দ্বারা আধা-এক্সপোজ করা হয়। আপনি ANativeWindow_fromSurface() কলের মাধ্যমে একটি সারফেস থেকে ANativeWindow পেতে পারেন। জাভা-ভাষার কাজিনের মতো, আপনি এটিকে লক করতে, সফ্টওয়্যারে রেন্ডার করতে এবং আনলক-এন্ড-পোস্ট করতে পারেন। মৌলিক নেটিভ উইন্ডো টাইপ হল একটি BufferQueue এর প্রযোজক দিক।

নেটিভ কোড থেকে একটি EGL উইন্ডো সারফেস তৈরি করতে, EGLNativeWindowType এর একটি উদাহরণ eglCreateWindowSurface() এ পাস করুন। EGLNativeWindowType হল ANativeWindow এর সমার্থক শব্দ, যাতে আপনি একটিকে অন্যটিতে কাস্ট করতে পারেন।