অ্যান্ড্রয়েড গ্রাফিক্স রেন্ডার করতে OpenGL ES (GLES) API ব্যবহার করে। GLES প্রসঙ্গ তৈরি করতে এবং GLES রেন্ডারিংয়ের জন্য একটি উইন্ডো সিস্টেম প্রদান করতে, Android EGL লাইব্রেরি ব্যবহার করে। GLES কল টেক্সচার্ড বহুভুজ রেন্ডার করে, যখন EGL কল স্ক্রীনে রেন্ডারিং রাখে।
আপনি GLES দিয়ে আঁকার আগে, আপনাকে একটি GL প্রসঙ্গ তৈরি করতে হবে। EGL-এ, এর মানে হল একটি EGLCcontext এবং একটি EGLSsurface তৈরি করা। GLES অপারেশনগুলি বর্তমান প্রেক্ষাপটে প্রযোজ্য, যা একটি যুক্তি হিসাবে পাস করার পরিবর্তে থ্রেড-লোকাল স্টোরেজের মাধ্যমে অ্যাক্সেস করা হয়। রেন্ডারিং কোডটি বর্তমান GLES থ্রেডে কার্যকর করা উচিত, UI থ্রেডে নয়।
ইজিএলসারফেস
EGLSsurface EGL দ্বারা বরাদ্দ করা অফ-স্ক্রিন বাফার হতে পারে, যাকে pbuffer বলা হয়, অথবা অপারেটিং সিস্টেম দ্বারা বরাদ্দ করা একটি উইন্ডো। eglCreateWindowSurface()
ফাংশন কল করলে EGL উইন্ডো সারফেস তৈরি হয়। eglCreateWindowSurface()
একটি যুক্তি হিসাবে একটি উইন্ডো অবজেক্ট নেয়, যা অ্যান্ড্রয়েডে একটি পৃষ্ঠ। একটি পৃষ্ঠ হল একটি বাফার কিউ এর প্রযোজক দিক। ভোক্তারা , যা হল SurfaceView, SurfaceTexture, TextureView, বা ImageReader, সারফেস তৈরি করে। আপনি যখন eglCreateWindowSurface()
কল করেন, তখন EGL একটি নতুন EGLSurface অবজেক্ট তৈরি করে এবং এটিকে উইন্ডো অবজেক্টের BufferQueue-এর প্রযোজক ইন্টারফেসের সাথে সংযুক্ত করে। সেই বিন্দু থেকে, সেই EGLSSurface-এ রেন্ডার করার ফলে একটি বাফার সারিবদ্ধ, রেন্ডার করা এবং ভোক্তার দ্বারা ব্যবহারের জন্য সারিবদ্ধ হয়।
EGL লক/আনলক কল প্রদান করে না। অঙ্কন কমান্ড ইস্যু করুন এবং তারপরে বর্তমান ফ্রেম জমা দিতে eglSwapBuffers()
কল করুন। পদ্ধতির নামটি সামনের এবং পিছনের বাফারগুলির প্রথাগত অদলবদল থেকে এসেছে, কিন্তু প্রকৃত বাস্তবায়ন ভিন্ন হতে পারে।
একটি সময়ে একটি পৃষ্ঠের সাথে শুধুমাত্র একটি EGLSurface যুক্ত হতে পারে (আপনি একটি BufferQueue এর সাথে শুধুমাত্র একজন প্রযোজক সংযুক্ত থাকতে পারেন), কিন্তু আপনি যদি EGLSurface ধ্বংস করেন তবে এটি BufferQueue থেকে সংযোগ বিচ্ছিন্ন হয়ে যায় এবং অন্য কিছু সংযোগ করতে দেয়।
একটি প্রদত্ত থ্রেড বর্তমানের পরিবর্তন করে একাধিক EGLSসারফেসের মধ্যে স্যুইচ করতে পারে। একটি EGLSsurface একটি সময়ে শুধুমাত্র একটি থ্রেড বর্তমান হতে হবে.
EGL একটি পৃষ্ঠের অন্য একটি দিক নয় (যেমন সারফেসহোল্ডার)। EGLSurface একটি সম্পর্কিত কিন্তু স্বাধীন ধারণা। আপনি একটি EGLSSurface আঁকতে পারেন যা একটি পৃষ্ঠ দ্বারা সমর্থিত নয় এবং আপনি EGL ছাড়া একটি পৃষ্ঠ ব্যবহার করতে পারেন। EGLSurface শুধুমাত্র GLESকে আঁকার জায়গা প্রদান করে।
OpenGL ES এবং EGL প্রয়োজনীয়তার জন্য Android সামঞ্জস্যপূর্ণ সংজ্ঞা নথি পড়ুন।
ANativeWindow
পাবলিক সারফেস ক্লাস জাভা প্রোগ্রামিং ভাষায় প্রয়োগ করা হয়। C/C++ এর সমতুল্য হল ANativeWindow ক্লাস, Android NDK দ্বারা আধা-উন্মুক্ত। আপনি ANativeWindow_fromSurface()
কলের মাধ্যমে একটি পৃষ্ঠ থেকে ANativeWindow পেতে পারেন। জাভা-ভাষার কাজিনের মতো, আপনি এটিকে লক করতে, সফ্টওয়্যারে রেন্ডার করতে এবং আনলক-এবং-পোস্ট করতে পারেন। বেসিক নেটিভ উইন্ডো টাইপ হল একটি BufferQueue এর প্রযোজক দিক।
নেটিভ কোড থেকে একটি EGL উইন্ডো পৃষ্ঠ তৈরি করতে, EGLNativeWindowType-এর একটি উদাহরণ eglCreateWindowSurface()
এ পাস করুন। EGLNativeWindowType হল ANativeWindow-এর প্রতিশব্দ, তাই আপনি একটিকে অন্যটিতে কাস্ট করতে পারেন।