ग्राफिक्स

संग्रह की मदद से व्यवस्थित रहें अपनी प्राथमिकताओं के आधार पर, कॉन्टेंट को सेव करें और कैटगरी में बांटें.
एंड्रॉइड ग्राफिक्स एचएएल आइकन

एंड्रॉइड फ्रेमवर्क 2 डी और 3 डी के लिए विभिन्न प्रकार के ग्राफिक्स रेंडरिंग एपीआई प्रदान करता है जो ग्राफिक्स ड्राइवरों के निर्माता कार्यान्वयन के साथ बातचीत करते हैं, इसलिए यह अच्छी तरह से समझना महत्वपूर्ण है कि वे एपीआई उच्च स्तर पर कैसे काम करते हैं। यह पृष्ठ ग्राफिक्स हार्डवेयर एब्स्ट्रैक्शन लेयर (HAL) का परिचय देता है, जिस पर वे ड्राइवर बने होते हैं।

एप्लिकेशन डेवलपर्स स्क्रीन पर तीन तरह से चित्र बनाते हैं: कैनवास , ओपनजीएल ईएस , या वल्कन के साथ।

एंड्रॉइड ग्राफिक्स घटक

कोई फर्क नहीं पड़ता कि एपीआई डेवलपर्स किस प्रतिपादन का उपयोग करते हैं, सब कुछ एक सतह पर प्रस्तुत किया जाता है। सतह एक बफर कतार के निर्माता पक्ष का प्रतिनिधित्व करती है जिसे अक्सर सर्फेसफ्लिंगर द्वारा उपभोग किया जाता है। एंड्रॉइड प्लेटफॉर्म पर बनाई गई प्रत्येक विंडो एक सतह द्वारा समर्थित होती है। प्रदान की गई सभी दृश्यमान सतहों को सरफेसफ्लिंगर द्वारा डिस्प्ले पर संयोजित किया गया है।

निम्नलिखित आरेख दिखाता है कि प्रमुख घटक एक साथ कैसे काम करते हैं:

छवि प्रतिपादन घटक

चित्र 1. सतहों का प्रतिपादन कैसे किया जाता है

मुख्य घटक नीचे वर्णित हैं:

छवि स्ट्रीम निर्माता

एक छवि स्ट्रीम निर्माता कुछ भी हो सकता है जो उपभोग के लिए ग्राफिक बफर उत्पन्न करता है। उदाहरणों में OpenGL ES, कैनवास 2D, और मीडियासर्वर वीडियो डिकोडर शामिल हैं।

छवि स्ट्रीम उपभोक्ता

इमेज स्ट्रीम का सबसे आम उपभोक्ता सर्फेसफ्लिंगर है, सिस्टम सेवा जो वर्तमान में दिखाई देने वाली सतहों का उपभोग करती है और विंडो मैनेजर द्वारा प्रदान की गई जानकारी का उपयोग करके उन्हें डिस्प्ले पर कंपोजिट करती है। सरफेसफ्लिंगर एकमात्र ऐसी सेवा है जो डिस्प्ले की सामग्री को संशोधित कर सकती है। सरफेसफ्लिंगर सतहों के समूह की रचना के लिए ओपनजीएल और हार्डवेयर कम्पोजर का उपयोग करता है।

अन्य ओपनजीएल ईएस ऐप्स छवि स्ट्रीम का भी उपभोग कर सकते हैं, जैसे कैमरा ऐप कैमरा पूर्वावलोकन छवि स्ट्रीम का उपभोग कर रहा है। गैर-जीएल अनुप्रयोग उपभोक्ता भी हो सकते हैं, उदाहरण के लिए ImageReader वर्ग।

हार्डवेयर संगीतकार

डिस्प्ले सबसिस्टम के लिए हार्डवेयर एब्स्ट्रैक्शन। सर्फेसफ्लिंगर ओपनजीएल और जीपीयू से काम को ऑफलोड करने के लिए हार्डवेयर कम्पोज़र को कुछ रचना कार्य सौंप सकता है। सर्फेसफ्लिंगर सिर्फ एक अन्य ओपनजीएल ईएस क्लाइंट के रूप में कार्य करता है। इसलिए जब सर्फेसफ्लिंगर सक्रिय रूप से एक बफर या दो को एक तिहाई में जोड़ रहा है, उदाहरण के लिए, यह ओपनजीएल ईएस का उपयोग कर रहा है। यह GPU द्वारा सभी गणनाओं का संचालन करने की तुलना में कम शक्ति का संयोजन करता है।

हार्डवेयर कम्पोज़र एचएएल काम के दूसरे आधे हिस्से का संचालन करता है और सभी एंड्रॉइड ग्राफिक्स रेंडरिंग के लिए केंद्रीय बिंदु है। हार्डवेयर संगीतकार को घटनाओं का समर्थन करना चाहिए, जिनमें से एक वीएसवाईएनसी है (दूसरा प्लग-एंड-प्लेएचडीएमआई समर्थन के लिए हॉटप्लग है)।

ग्रालोक

छवि उत्पादकों द्वारा अनुरोधित स्मृति आवंटित करने के लिए ग्राफिक्स मेमोरी एलोकेटर (ग्रैलोक) की आवश्यकता होती है। विवरण के लिए, ग्रालोक एचएएल देखें।

डाटा प्रवाह

Android ग्राफ़िक्स पाइपलाइन के चित्रण के लिए निम्न आरेख देखें:

ग्राफिक्स डेटा प्रवाह

चित्रा 2. एंड्रॉइड के माध्यम से ग्राफिक डेटा प्रवाह

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

बफर कतार

बफ़रक्यूज़ एंड्रॉइड ग्राफिक्स घटकों के बीच गोंद प्रदान करते हैं। ये कतारों की एक जोड़ी है जो निर्माता से उपभोक्ता तक बफ़र्स के निरंतर चक्र की मध्यस्थता करती है। एक बार जब निर्माता अपने बफ़र्स को बंद कर देते हैं, तो सर्फेसफ्लिंगर डिस्प्ले पर सब कुछ कंपोज़िट करने के लिए जिम्मेदार होता है।

बफ़रक्यू संचार प्रक्रिया के लिए निम्न आरेख देखें।

बफरक्यू संचार प्रक्रिया

चित्रा 3. बफरक्यू संचार प्रक्रिया

बफ़रक्यू में वह तर्क होता है जो छवि स्ट्रीम उत्पादकों और छवि स्ट्रीम उपभोक्ताओं को एक साथ जोड़ता है। छवि निर्माता के कुछ उदाहरण कैमरा एचएएल या ओपनजीएल ईएस गेम द्वारा निर्मित कैमरा पूर्वावलोकन हैं। छवि उपभोक्ताओं के कुछ उदाहरण सर्फेसफ्लिंगर या कोई अन्य ऐप है जो ओपनजीएल ईएस स्ट्रीम प्रदर्शित करता है, जैसे कैमरा ऐप कैमरा व्यूफिंडर प्रदर्शित करता है।

बफ़रक्यू एक डेटा संरचना है जो एक बफर पूल को एक कतार के साथ जोड़ती है और प्रक्रियाओं के बीच बफ़र्स को पारित करने के लिए बाइंडर आईपीसी का उपयोग करती है। निर्माता इंटरफ़ेस, या जो आप किसी ऐसे व्यक्ति को देते हैं जो ग्राफिक बफ़र्स उत्पन्न करना चाहता है, वह है IGraphicBufferProducer ( SurfaceTexture का हिस्सा)। BufferQueue का उपयोग अक्सर सतह पर रेंडर करने और अन्य कार्यों के साथ GL उपभोक्ता के साथ उपभोग करने के लिए किया जाता है।

BufferQueue तीन अलग-अलग मोड में काम कर सकता है:

सिंक्रोनस-लाइक मोड - बफ़रक्यू डिफ़ॉल्ट रूप से एक सिंक्रोनस-जैसे मोड में संचालित होता है, जिसमें निर्माता से आने वाला प्रत्येक बफर उपभोक्ता के पास जाता है। इस मोड में कोई बफर कभी नहीं छोड़ा जाता है। और अगर निर्माता बहुत तेज़ है और बफ़र्स को ड्रेन किए जाने की तुलना में तेज़ी से बनाता है, तो यह ब्लॉक हो जाएगा और फ्री बफ़र्स की प्रतीक्षा करेगा।

गैर-अवरुद्ध मोड - बफ़रक्यू एक गैर-अवरुद्ध मोड में भी काम कर सकता है जहां यह उन मामलों में बफर की प्रतीक्षा करने के बजाय एक त्रुटि उत्पन्न करता है। इस मोड में किसी भी बफर को कभी भी खारिज नहीं किया जाता है। यह एप्लिकेशन सॉफ़्टवेयर में संभावित गतिरोध से बचने के लिए उपयोगी है जो ग्राफिक्स ढांचे की जटिल निर्भरता को नहीं समझ सकता है।

डिस्कार्ड मोड - अंत में, बफ़रक्यू को त्रुटियाँ उत्पन्न करने या प्रतीक्षा करने के बजाय पुराने बफ़र्स को त्यागने के लिए कॉन्फ़िगर किया जा सकता है। उदाहरण के लिए, यदि जीएल रेंडरिंग को टेक्सचर व्यू में संचालित करना और जितनी जल्दी हो सके ड्राइंग करना, बफ़र्स को छोड़ देना चाहिए।

इस अधिकांश कार्य को करने के लिए, SurfaceFlinger केवल एक अन्य OpenGL ES क्लाइंट के रूप में कार्य करता है। इसलिए जब सर्फेसफ्लिंगर सक्रिय रूप से एक बफर या दो को एक तिहाई में जोड़ रहा है, उदाहरण के लिए, यह ओपनजीएल ईएस का उपयोग कर रहा है।

हार्डवेयर कम्पोज़र एचएएल दूसरे आधे काम का संचालन करता है। यह एचएएल सभी एंड्रॉइड ग्राफिक्स रेंडरिंग के लिए केंद्रीय बिंदु के रूप में कार्य करता है।