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

चित्र 1. सतहों को कैसे प्रस्तुत किया जाता है
मुख्य घटकों का वर्णन नीचे दिया गया है:
छवि स्ट्रीम निर्माता
एक छवि स्ट्रीम निर्माता कुछ भी हो सकता है जो उपभोग के लिए ग्राफिक बफ़र्स का उत्पादन करता है। उदाहरणों में ओपनजीएल ईएस, कैनवस 2डी और मीडियासर्वर वीडियो डिकोडर शामिल हैं।
छवि स्ट्रीम उपभोक्ता
छवि स्ट्रीम का सबसे आम उपभोक्ता सरफेसफ्लिंगर है, सिस्टम सेवा जो वर्तमान में दृश्यमान सतहों का उपभोग करती है और विंडो प्रबंधक द्वारा प्रदान की गई जानकारी का उपयोग करके उन्हें डिस्प्ले पर संयोजित करती है। सरफेसफ्लिंगर एकमात्र सेवा है जो डिस्प्ले की सामग्री को संशोधित कर सकती है। SurfaceFlinger सतहों का एक समूह बनाने के लिए OpenGL और हार्डवेयर कंपोज़र का उपयोग करता है।
अन्य ओपनजीएल ईएस ऐप्स भी छवि स्ट्रीम का उपभोग कर सकते हैं, जैसे कि कैमरा ऐप कैमरा पूर्वावलोकन छवि स्ट्रीम का उपभोग करता है। गैर-जीएल अनुप्रयोग भी उपभोक्ता हो सकते हैं, उदाहरण के लिए इमेजरीडर वर्ग।
हार्डवेयर संगीतकार
डिस्प्ले सबसिस्टम के लिए हार्डवेयर एब्स्ट्रैक्शन। सरफेसफ्लिंगर ओपनजीएल और जीपीयू से काम को ऑफलोड करने के लिए हार्डवेयर कंपोजर को कुछ कंपोजिशन कार्य सौंप सकता है। सरफेसफ्लिंगर एक अन्य ओपनजीएल ईएस क्लाइंट के रूप में कार्य करता है। उदाहरण के लिए, जब SurfaceFlinger सक्रिय रूप से एक या दो बफर को तीसरे में संयोजित कर रहा है, तो यह OpenGL ES का उपयोग कर रहा है। इससे जीपीयू द्वारा सभी गणनाएं संचालित करने की तुलना में कंपोजिटिंग की शक्ति कम हो जाती है।
हार्डवेयर कंपोज़र एचएएल काम का दूसरा भाग संचालित करता है और सभी एंड्रॉइड ग्राफिक्स रेंडरिंग के लिए केंद्रीय बिंदु है। हार्डवेयर कंपोज़र को इवेंट का समर्थन करना चाहिए, जिनमें से एक VSYNC है (दूसरा प्लग-एंड-प्लेएचडीएमआई समर्थन के लिए हॉटप्लग है)।
ग्रालोक
छवि उत्पादकों द्वारा अनुरोधित मेमोरी को आवंटित करने के लिए ग्राफिक्स मेमोरी एलोकेटर (ग्रालोक) की आवश्यकता होती है। विवरण के लिए, ग्रालोक एचएएल देखें।
डेटा प्रवाह
एंड्रॉइड ग्राफ़िक्स पाइपलाइन के चित्रण के लिए निम्नलिखित चित्र देखें:

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

चित्र 3. बफ़रक्यू संचार प्रक्रिया
बफ़रक्यू में वह तर्क शामिल है जो छवि स्ट्रीम उत्पादकों और छवि स्ट्रीम उपभोक्ताओं को एक साथ जोड़ता है। छवि उत्पादकों के कुछ उदाहरण कैमरा एचएएल या ओपनजीएल ईएस गेम्स द्वारा निर्मित कैमरा पूर्वावलोकन हैं। छवि उपभोक्ताओं के कुछ उदाहरण सरफेसफ्लिंगर या अन्य ऐप हैं जो ओपनजीएल ईएस स्ट्रीम प्रदर्शित करते हैं, जैसे कैमरा ऐप कैमरा व्यूफ़ाइंडर प्रदर्शित करता है।
बफ़रक्यू एक डेटा संरचना है जो एक बफर पूल को एक कतार के साथ जोड़ती है और प्रक्रियाओं के बीच बफ़र्स को पारित करने के लिए बाइंडर आईपीसी का उपयोग करती है। निर्माता इंटरफ़ेस, या जो आप किसी ऐसे व्यक्ति को पास करते हैं जो ग्राफ़िक बफ़र्स उत्पन्न करना चाहता है, वह IGraphicBufferProducer ( SurfaceTexture का हिस्सा) है। बफ़रक्यू का उपयोग अक्सर अन्य कार्यों के अलावा किसी सरफेस पर रेंडर करने और जीएल उपभोक्ता के साथ उपभोग करने के लिए किया जाता है।
बफ़रक्यू तीन अलग-अलग मोड में काम कर सकता है:
सिंक्रोनस-लाइक मोड - बफ़रक्यू डिफ़ॉल्ट रूप से सिंक्रोनस-लाइक मोड में काम करता है, जिसमें निर्माता से आने वाला प्रत्येक बफर उपभोक्ता पर जाता है। इस मोड में कभी भी कोई बफ़र नहीं छोड़ा जाता है। और यदि निर्माता बहुत तेज़ है और बफ़र्स को ख़त्म करने की तुलना में तेज़ी से बनाता है, तो यह ब्लॉक हो जाएगा और मुफ़्त बफ़र्स की प्रतीक्षा करेगा।
नॉन-ब्लॉकिंग मोड - बफ़रक्यू नॉन-ब्लॉकिंग मोड में भी काम कर सकता है जहां यह उन मामलों में बफर की प्रतीक्षा करने के बजाय त्रुटि उत्पन्न करता है। इस मोड में कभी भी कोई बफ़र नहीं छोड़ा जाता है। यह एप्लिकेशन सॉफ़्टवेयर में संभावित गतिरोधों से बचने के लिए उपयोगी है जो ग्राफ़िक्स फ़्रेमवर्क की जटिल निर्भरता को नहीं समझ सकते हैं।
त्यागें मोड - अंत में, त्रुटियों को उत्पन्न करने या प्रतीक्षा करने के बजाय पुराने बफ़र्स को त्यागने के लिए बफ़रक्यू को कॉन्फ़िगर किया जा सकता है। उदाहरण के लिए, यदि जीएल रेंडरिंग को बनावट दृश्य में आयोजित किया जाता है और जितनी जल्दी हो सके ड्राइंग की जाती है, तो बफ़र्स को हटा दिया जाना चाहिए।
इस अधिकांश कार्य को संचालित करने के लिए, SurfaceFlinger एक अन्य OpenGL ES क्लाइंट के रूप में कार्य करता है। उदाहरण के लिए, जब SurfaceFlinger सक्रिय रूप से एक या दो बफर को तीसरे में संयोजित कर रहा है, तो यह OpenGL ES का उपयोग कर रहा है।
हार्डवेयर कंपोजर एचएएल बाकी आधे काम का संचालन करता है। यह HAL सभी Android ग्राफ़िक्स रेंडरिंग के लिए केंद्रीय बिंदु के रूप में कार्य करता है।