ईजीएलसर्फेस और ओपनजीएल ईएस

ग्राफ़िक्स प्रस्तुत करने के लिए Android OpenGL ES (GLES) API का उपयोग करता है। जीएलईएस संदर्भ बनाने और जीएलईएस रेंडरिंग के लिए एक विंडोिंग सिस्टम प्रदान करने के लिए, एंड्रॉइड ईजीएल लाइब्रेरी का उपयोग करता है। जीएलईएस कॉल बनावट वाले बहुभुजों को प्रस्तुत करते हैं, जबकि ईजीएल कॉल स्क्रीन पर रेंडरिंग डालते हैं।

इससे पहले कि आप GLES से चित्र बनाएं, आपको एक GL संदर्भ बनाना होगा। ईजीएल में, इसका मतलब एक ईजीएलकॉन्टेक्स्ट और एक ईजीएलसर्फेस बनाना है। जीएलईएस ऑपरेशन वर्तमान संदर्भ पर लागू होते हैं, जिन्हें तर्क के रूप में पारित करने के बजाय थ्रेड-लोकल स्टोरेज के माध्यम से एक्सेस किया जाता है। रेंडरिंग कोड मौजूदा GLES थ्रेड पर निष्पादित होना चाहिए, UI थ्रेड पर नहीं।

ईजीएलसतहें

ईजीएलसरफेस ईजीएल द्वारा आवंटित एक ऑफ-स्क्रीन बफर हो सकता है, जिसे पीबफर कहा जाता है, या ऑपरेटिंग सिस्टम द्वारा आवंटित एक विंडो हो सकता है। eglCreateWindowSurface() फ़ंक्शन को कॉल करने से EGL विंडो सरफेस बनता है। eglCreateWindowSurface() एक विंडो ऑब्जेक्ट को तर्क के रूप में लेता है, जो एंड्रॉइड पर एक सतह है। सतह बफ़रक्यू का निर्माता पक्ष है। उपभोक्ता , जो SurfaceView, SurfaceTexture, TextureView, या ImageReader हैं, सतह बनाते हैं। जब आप eglCreateWindowSurface() को कॉल करते हैं, तो EGL एक नया EGLSurface ऑब्जेक्ट बनाता है और इसे विंडो ऑब्जेक्ट के बफ़रक्यू के निर्माता इंटरफ़ेस से जोड़ता है। उस बिंदु से आगे, उस ईजीएलसर्फेस को प्रस्तुत करने के परिणामस्वरूप एक बफर को उपभोक्ता द्वारा उपयोग के लिए डीक्यू किया जाता है, प्रस्तुत किया जाता है और कतारबद्ध किया जाता है।

ईजीएल लॉक/अनलॉक कॉल प्रदान नहीं करता है। ड्राइंग कमांड जारी करें और फिर वर्तमान फ्रेम सबमिट करने के लिए eglSwapBuffers() को कॉल करें। विधि का नाम फ्रंट और बैक बफ़र्स के पारंपरिक स्वैप से आता है, लेकिन वास्तविक कार्यान्वयन भिन्न हो सकता है।

एक समय में केवल एक ईजीएलसरफेस को एक सतह के साथ जोड़ा जा सकता है (आप केवल एक निर्माता को बफरक्यू से कनेक्ट कर सकते हैं), लेकिन यदि आप ईजीएलसरफेस को नष्ट कर देते हैं तो यह बफरक्यू से डिस्कनेक्ट हो जाता है और कुछ और कनेक्ट होने देता है।

एक दिया गया थ्रेड वर्तमान को बदलकर कई ईजीएलसर्फेस के बीच स्विच कर सकता है। एक EGLSurface एक समय में केवल एक थ्रेड पर चालू होना चाहिए।

ईजीएल किसी सतह का दूसरा पहलू नहीं है (सरफेसहोल्डर की तरह)। ईजीएलसरफेस एक संबंधित लेकिन स्वतंत्र अवधारणा है। आप एक ईजीएल सतह पर चित्र बना सकते हैं जो किसी सतह द्वारा समर्थित नहीं है, और आप ईजीएल के बिना एक सतह का उपयोग कर सकते हैं। EGLSurface सिर्फ GLES को चित्र बनाने के लिए जगह प्रदान करता है।

ओपनजीएल ईएस और ईजीएल आवश्यकताओं के लिए एंड्रॉइड संगतता परिभाषा दस्तावेज़ देखें।

एनेटिवविंडो

सार्वजनिक सतह वर्ग को जावा प्रोग्रामिंग भाषा में लागू किया गया है। C/C++ में समतुल्य ANativeWindow क्लास है, जो Android NDK द्वारा अर्ध-उजागर है। आप ANativeWindow_fromSurface() कॉल से किसी सतह से ANativeWindow प्राप्त कर सकते हैं। इसके जावा-भाषा चचेरे भाई की तरह, आप इसे लॉक कर सकते हैं, सॉफ़्टवेयर में प्रस्तुत कर सकते हैं, और अनलॉक-और-पोस्ट कर सकते हैं। मूल देशी विंडो प्रकार बफ़रक्यू का निर्माता पक्ष है।

मूल कोड से एक ईजीएल विंडो सतह बनाने के लिए, EGLNativeWindowType का एक उदाहरण eglCreateWindowSurface() पर पास करें। EGLNativeWindowType ANativeWindow का पर्याय है, जिससे आप एक को दूसरे में डाल सकते हैं।