प्रत्येक डेवलपर को Surfaces, SurfaceHolder, EGLSurface, SurfaceView, GLSurfaceView, SurfaceTexture, TextureView, SurfaceFlinger, और Vulkan के बारे में क्या पता होना चाहिए।
यह पृष्ठ एंड्रॉइड सिस्टम-स्तरीय ग्राफिक्स आर्किटेक्चर के आवश्यक तत्वों का वर्णन करता है और ऐप फ्रेमवर्क और मल्टीमीडिया सिस्टम द्वारा उनका उपयोग कैसे किया जाता है। फोकस इस बात पर है कि ग्राफ़िकल डेटा के बफ़र सिस्टम के माध्यम से कैसे चलते हैं। यदि आपने कभी सोचा है कि SurfaceView और TextureView इस तरह व्यवहार क्यों करते हैं, या Surfaces और EGLSurface कैसे इंटरैक्ट करते हैं, तो आप सही जगह पर हैं।
एंड्रॉइड डिवाइस और ऐप डेवलपमेंट के साथ कुछ परिचित होने का अनुमान है। आपको ऐप फ्रेमवर्क के विस्तृत ज्ञान की आवश्यकता नहीं है और बहुत कम एपीआई कॉल का उल्लेख किया गया है, लेकिन सामग्री अन्य सार्वजनिक दस्तावेज़ों के साथ ओवरलैप नहीं होती है। लक्ष्य किसी ऐप को डिज़ाइन करते समय सूचित विकल्प चुनने में मदद करने के लिए आउटपुट के लिए एक फ्रेम प्रस्तुत करने में शामिल महत्वपूर्ण घटनाओं पर विवरण प्रदान करना है। इसे प्राप्त करने के लिए, हम नीचे से ऊपर तक काम करते हैं, यह बताते हुए कि यूआई कक्षाएं कैसे काम करती हैं न कि उनका उपयोग कैसे किया जा सकता है।
इस अनुभाग में पृष्ठभूमि सामग्री से लेकर एचएएल विवरण और उपयोग के मामलों तक सब कुछ शामिल करने वाले कई पृष्ठ शामिल हैं। यह एंड्रॉइड ग्राफ़िक्स बफ़र्स की व्याख्या के साथ शुरू होता है, संरचना और प्रदर्शन तंत्र का वर्णन करता है, फिर उच्च-स्तरीय तंत्र की ओर बढ़ता है जो कंपोज़िटर को डेटा की आपूर्ति करता है। हम दिलचस्प लगने वाले किसी विषय पर जाने के बजाय नीचे सूचीबद्ध क्रम में पृष्ठों को पढ़ने की सलाह देते हैं।
निम्न-स्तरीय घटक
- बफ़रक्यू और ग्रालोक । बफ़रक्यू कुछ ऐसी चीज़ों को जोड़ता है जो ग्राफ़िकल डेटा ( निर्माता ) के बफ़र्स को किसी ऐसी चीज़ से जोड़ता है जो डेटा को प्रदर्शन या आगे की प्रक्रिया ( उपभोक्ता ) के लिए स्वीकार करता है। विक्रेता-विशिष्ट एचएएल इंटरफ़ेस के माध्यम से कार्यान्वित ग्रालोक मेमोरी एलोकेटर के माध्यम से बफर आवंटन किया जाता है।
- सरफेसफ्लिंगर, हार्डवेयर कंपोजर और वर्चुअल डिस्प्ले । सरफेसफ्लिंगर कई स्रोतों से डेटा के बफ़र्स स्वीकार करता है, उन्हें मिश्रित करता है, और उन्हें डिस्प्ले पर भेजता है। हार्डवेयर कंपोजर एचएएल (एचडब्ल्यूसी) उपलब्ध हार्डवेयर के साथ कंपोजिट बफ़र्स का सबसे कुशल तरीका निर्धारित करता है, और वर्चुअल डिस्प्ले सिस्टम के भीतर कंपोजिट आउटपुट उपलब्ध कराता है (स्क्रीन को रिकॉर्ड करना या नेटवर्क पर स्क्रीन भेजना)।
- सतह, कैनवास, और सतह धारक । एक सतह एक बफ़र कतार उत्पन्न करती है जिसका उपयोग अक्सर SurfaceFlinger द्वारा किया जाता है। किसी सतह पर प्रस्तुत करते समय, परिणाम एक बफ़र में समाप्त हो जाता है जो उपभोक्ता को भेज दिया जाता है। कैनवस एपीआई सतह पर सीधे ड्राइंग के लिए एक सॉफ्टवेयर कार्यान्वयन (हार्डवेयर-एक्सेलेरेशन समर्थन के साथ) प्रदान करता है (ओपनजीएल ईएस के लिए निम्न-स्तरीय विकल्प)। किसी दृश्य से संबंधित किसी भी चीज़ में एक सरफेसहोल्डर शामिल होता है, जिसके एपीआई आकार और प्रारूप जैसे सतह पैरामीटर प्राप्त करने और सेट करने में सक्षम होते हैं।
- ईजीएलसरफेस और ओपनजीएल ईएस । ओपनजीएल ईएस (जीएलईएस) एक ग्राफिक्स-रेंडरिंग एपीआई को परिभाषित करता है जिसे ईजीएल के साथ संयोजित करने के लिए डिज़ाइन किया गया है, एक लाइब्रेरी जो ऑपरेटिंग सिस्टम के माध्यम से विंडोज़ बना और एक्सेस कर सकती है (बनावट वाले बहुभुज बनाने के लिए, जीएलईएस कॉल का उपयोग करें; स्क्रीन पर रेंडरिंग लगाने के लिए, ईजीएल कॉल का उपयोग करें) ). यह पेज ANativeWindow को भी कवर करता है, जो जावा सरफेस क्लास का C/C++ समकक्ष है, जिसका उपयोग नेटिव कोड से ईजीएल विंडो सरफेस बनाने के लिए किया जाता है।
- वल्कन । वल्कन उच्च-प्रदर्शन वाले 3डी ग्राफ़िक्स के लिए एक कम-ओवरहेड, क्रॉस-प्लेटफ़ॉर्म एपीआई है। ओपनजीएल ईएस की तरह, वल्कन ऐप्स में उच्च-गुणवत्ता, वास्तविक समय ग्राफिक्स बनाने के लिए उपकरण प्रदान करता है। वल्कन के फायदों में सीपीयू ओवरहेड में कटौती और एसपीआईआर-वी बाइनरी इंटरमीडिएट भाषा के लिए समर्थन शामिल है।
उच्च स्तरीय घटक
- SurfaceView और GLSurfaceView । SurfaceView एक सतह और एक दृश्य को जोड़ता है। SurfaceView के दृश्य घटकों को SurfaceFlinger (और ऐप नहीं) द्वारा संयोजित किया गया है, जो एक अलग थ्रेड/प्रक्रिया से रेंडरिंग और ऐप UI रेंडरिंग से अलगाव को सक्षम बनाता है। GLSurfaceView EGL संदर्भों, इंटरथ्रेड संचार और गतिविधि जीवनचक्र के साथ इंटरैक्शन को प्रबंधित करने के लिए सहायक कक्षाएं प्रदान करता है (लेकिन GLES का उपयोग करने की आवश्यकता नहीं है)।
- सतह बनावट । SurfaceTexture एक सतह और GLES बनावट को मिलाकर एक बफ़रक्यू बनाता है जिसके लिए आपका ऐप उपभोक्ता है। जब कोई निर्माता एक नए बफ़र को कतारबद्ध करता है, तो यह आपके ऐप को सूचित करता है, जो बदले में पहले से आयोजित बफ़र को रिलीज़ करता है, कतार से नया बफ़र प्राप्त करता है, और बफ़र को बाहरी बनावट के रूप में GLES को उपलब्ध कराने के लिए EGL कॉल करता है। एंड्रॉइड 7.0 ने सुरक्षित बनावट वाले वीडियो प्लेबैक के लिए समर्थन जोड़ा, जिससे संरक्षित वीडियो सामग्री की जीपीयू पोस्ट-प्रोसेसिंग सक्षम हो गई।
- बनावट दृश्य । TextureView एक दृश्य को SurfaceTexture के साथ जोड़ता है। TextureView एक SurfaceTexture को लपेटता है और कॉलबैक का जवाब देने और नए बफ़र्स प्राप्त करने की ज़िम्मेदारी लेता है। ड्राइंग करते समय, TextureView अपने डेटा स्रोत के रूप में सबसे हाल ही में प्राप्त बफर की सामग्री का उपयोग करता है, जहां भी और जिस तरह से दृश्य स्थिति इंगित करती है उसे प्रस्तुत करता है। दृश्य संरचना हमेशा GLES के साथ निष्पादित की जाती है, जिसका अर्थ है कि सामग्री के अपडेट के कारण अन्य दृश्य तत्व भी फिर से तैयार हो सकते हैं।