एंड्रॉइड फ्रेमवर्क 2डी और 3डी के लिए विभिन्न प्रकार के ग्राफिक्स रेंडरिंग एपीआई प्रदान करता है जो ग्राफिक्स ड्राइवरों के निर्माता कार्यान्वयन के साथ इंटरैक्ट करता है, इसलिए यह अच्छी समझ होना महत्वपूर्ण है कि वे एपीआई उच्च स्तर पर कैसे काम करते हैं। यह पृष्ठ ग्राफ़िक्स हार्डवेयर एब्स्ट्रैक्शन लेयर (एचएएल) का परिचय देता है जिस पर ये ड्राइवर बनाए गए हैं। इस अनुभाग को जारी रखने से पहले, निम्नलिखित शर्तों से स्वयं को परिचित कर लें:
Canvas
(एपीआई तत्व)Surface
ऑब्जेक्ट के विरुद्ध वास्तविक बिट्स की कंपोज़िटिंग को संभालती है। Canvas
बिटमैप, रेखाएं, वृत्त, आयत, पाठ इत्यादि के मानक कंप्यूटर ड्राइंग के तरीके हैं, और यह एक बिटमैप या सतह से बंधा हुआ है। कैनवास स्क्रीन पर 2D ऑब्जेक्ट बनाने का सबसे सरल, आसान तरीका है। बेस क्लास Canvas
है।android.graphics.drawable
के उपवर्गों में संकलित किया जाता है। ड्रॉएबल्स और अन्य संसाधनों के बारे में अधिक जानकारी के लिए संसाधन देखें।android.opengl
और javax.microedition.khronos.opengles
पैकेज OpenGL ES कार्यक्षमता को उजागर करते हैं।Surface
(एपीआई तत्व)Surface
ऑब्जेक्ट का आकार बदलने के लिए विभिन्न सहायक तरीके प्रदान करती है। सीधे Surface
क्लास के बजाय SurfaceView
क्लास का उपयोग करें।SurfaceView
(एपीआई तत्व)View
ऑब्जेक्ट है जो ड्राइंग के लिए Surface
ऑब्जेक्ट को लपेटता है, और इसके आकार और प्रारूप को गतिशील रूप से निर्दिष्ट करने के तरीकों को उजागर करता है। एक सतही दृश्य गेम या कैमरा पूर्वावलोकन जैसे संसाधन-गहन संचालन के लिए यूआई थ्रेड से स्वतंत्र रूप से आकर्षित करने का एक तरीका प्रदान करता है, लेकिन परिणामस्वरूप यह अतिरिक्त मेमोरी का उपयोग करता है। एक सतह दृश्य कैनवास और ओपनजीएल ईएस ग्राफिक्स दोनों का समर्थन करता है। SurfaceView
ऑब्जेक्ट के लिए बेस क्लास SurfaceView
है।R.style
में सूचीबद्ध हैं और Theme_
से पहले हैं।View
(एपीआई तत्व)View
क्लास किसी गतिविधि या डायलॉग स्क्रीन के अधिकांश लेआउट घटकों, जैसे टेक्स्ट बॉक्स और विंडोज़ के लिए बेस क्लास है। एक View
ऑब्जेक्ट स्वयं को खींचने के लिए अपने मूल ऑब्जेक्ट ( ViewGroup
देखें) से कॉल प्राप्त करता है, और अपने मूल ऑब्जेक्ट को उसके पसंदीदा आकार और स्थित के बारे में सूचित करता है, जिसका माता-पिता द्वारा सम्मान नहीं किया जा सकता है। अधिक जानकारी के लिए देखें View
.ViewGroup
(एपीआई तत्व)widget
पैकेज में हैं, लेकिन ViewGroup
वर्ग का विस्तार करें।android.widget
पैकेज में हैं।Window
(एपीआई तत्व)Window
एब्सट्रैक्ट क्लास से प्राप्त एक ऑब्जेक्ट है जो सामान्य विंडो के तत्वों को निर्दिष्ट करता है, जैसे लुक और फील, टाइटल बार टेक्स्ट और मेनू का स्थान और सामग्री। डायलॉग और गतिविधियाँ Window
ऑब्जेक्ट को प्रस्तुत करने के लिए Window
क्लास के कार्यान्वयन का उपयोग करते हैं। आपको Window
क्लास को लागू करने या अपने ऐप में विंडोज़ का उपयोग करने की आवश्यकता नहीं है।ऐप डेवलपर तीन तरीकों से स्क्रीन पर चित्र बनाते हैं: कैनवास , ओपनजीएल ईएस , या वल्कन के साथ।
एंड्रॉइड ग्राफिक्स घटक
इससे कोई फर्क नहीं पड़ता कि रेंडरिंग एपीआई डेवलपर्स किस प्रकार का उपयोग करते हैं, सब कुछ एक सतह पर प्रस्तुत किया जाता है। सतह बफ़र कतार के निर्माता पक्ष का प्रतिनिधित्व करती है जिसे अक्सर SurfaceFlinger द्वारा उपभोग किया जाता है। एंड्रॉइड प्लेटफ़ॉर्म पर बनाई गई प्रत्येक विंडो एक सतह द्वारा समर्थित होती है। प्रस्तुत की गई सभी दृश्य सतहों को सरफेसफ्लिंगर द्वारा डिस्प्ले पर संयोजित किया गया है।
निम्नलिखित चित्र दिखाता है कि प्रमुख घटक एक साथ कैसे काम करते हैं:
मुख्य घटकों का वर्णन नीचे दिया गया है:
छवि स्ट्रीम निर्माता
एक छवि स्ट्रीम निर्माता कुछ भी हो सकता है जो उपभोग के लिए ग्राफिक बफ़र्स का उत्पादन करता है। उदाहरणों में ओपनजीएल ईएस, कैनवस 2डी और मीडियासर्वर वीडियो डिकोडर शामिल हैं।
छवि स्ट्रीम उपभोक्ता
छवि स्ट्रीम का सबसे आम उपभोक्ता सरफेसफ्लिंगर है, सिस्टम सेवा जो वर्तमान में दृश्यमान सतहों का उपभोग करती है और विंडो प्रबंधक द्वारा प्रदान की गई जानकारी का उपयोग करके उन्हें डिस्प्ले पर संयोजित करती है। सरफेसफ्लिंगर एकमात्र सेवा है जो डिस्प्ले की सामग्री को संशोधित कर सकती है। SurfaceFlinger सतहों का एक समूह बनाने के लिए OpenGL और हार्डवेयर कंपोज़र का उपयोग करता है।
अन्य ओपनजीएल ईएस ऐप्स भी छवि स्ट्रीम का उपभोग कर सकते हैं, जैसे कि कैमरा ऐप कैमरा पूर्वावलोकन छवि स्ट्रीम का उपभोग करता है। गैर-जीएल ऐप्स भी उपभोक्ता हो सकते हैं, उदाहरण के लिए इमेजरीडर क्लास।
हार्डवेयर संगीतकार
डिस्प्ले सबसिस्टम के लिए हार्डवेयर एब्स्ट्रैक्शन। सरफेसफ्लिंगर ओपनजीएल और जीपीयू से काम को ऑफलोड करने के लिए हार्डवेयर कंपोजर को कुछ कंपोजिशन कार्य सौंप सकता है। सरफेसफ्लिंगर एक अन्य ओपनजीएल ईएस क्लाइंट के रूप में कार्य करता है। उदाहरण के लिए, जब SurfaceFlinger सक्रिय रूप से एक या दो बफर को तीसरे में संयोजित कर रहा है, तो यह OpenGL ES का उपयोग कर रहा है। इससे जीपीयू द्वारा सभी गणनाएं संचालित करने की तुलना में कंपोजिटिंग की शक्ति कम हो जाती है।
हार्डवेयर कंपोज़र एचएएल काम का दूसरा भाग संचालित करता है और सभी एंड्रॉइड ग्राफिक्स रेंडरिंग के लिए केंद्रीय बिंदु है। हार्डवेयर कंपोज़र को इवेंट का समर्थन करना चाहिए, जिनमें से एक VSYNC है (दूसरा प्लग-एंड-प्लेएचडीएमआई समर्थन के लिए हॉटप्लग है)।
ग्रालोक
छवि उत्पादकों द्वारा अनुरोधित मेमोरी को आवंटित करने के लिए ग्राफिक्स मेमोरी एलोकेटर (ग्रालोक) की आवश्यकता होती है। विवरण के लिए, ग्रालोक एचएएल देखें।
डेटा प्रवाह
एंड्रॉइड ग्राफ़िक्स पाइपलाइन के चित्रण के लिए निम्नलिखित चित्र देखें:
बाईं ओर की वस्तुएं रेंडरर्स हैं जो ग्राफ़िक्स बफ़र्स का उत्पादन करती हैं, जैसे होम स्क्रीन, स्टेटस बार और सिस्टम यूआई। सरफेसफ्लिंगर कंपोजिटर है और हार्डवेयर कंपोजर कंपोजर है।
बफ़रक्यू
बफ़रक्यूज़ एंड्रॉइड ग्राफ़िक्स घटकों के बीच गोंद प्रदान करता है। ये कतारों की एक जोड़ी है जो उत्पादक से उपभोक्ता तक बफ़र्स के निरंतर चक्र में मध्यस्थता करती है। एक बार जब निर्माता अपने बफ़र्स बंद कर देते हैं, तो सरफेसफ़्लिंगर डिस्प्ले पर सब कुछ संयोजित करने के लिए ज़िम्मेदार होता है।
बफ़रक्यू संचार प्रक्रिया के लिए निम्नलिखित चित्र देखें।
बफ़रक्यू में वह तर्क शामिल है जो छवि स्ट्रीम उत्पादकों और छवि स्ट्रीम उपभोक्ताओं को एक साथ जोड़ता है। छवि उत्पादकों के कुछ उदाहरण कैमरा एचएएल या ओपनजीएल ईएस गेम्स द्वारा निर्मित कैमरा पूर्वावलोकन हैं। छवि उपभोक्ताओं के कुछ उदाहरण सरफेसफ्लिंगर या अन्य ऐप हैं जो ओपनजीएल ईएस स्ट्रीम प्रदर्शित करते हैं, जैसे कैमरा ऐप कैमरा व्यूफ़ाइंडर प्रदर्शित करता है।
बफ़रक्यू एक डेटा संरचना है जो एक बफर पूल को एक कतार के साथ जोड़ती है और प्रक्रियाओं के बीच बफ़र्स को पारित करने के लिए बाइंडर आईपीसी का उपयोग करती है। निर्माता इंटरफ़ेस, या जो आप किसी ऐसे व्यक्ति को पास करते हैं जो ग्राफ़िक बफ़र्स उत्पन्न करना चाहता है, वह IGraphicBufferProducer ( SurfaceTexture का हिस्सा) है। बफ़रक्यू का उपयोग अक्सर अन्य कार्यों के अलावा किसी सरफेस पर रेंडर करने और जीएल उपभोक्ता के साथ उपभोग करने के लिए किया जाता है।
बफ़रक्यू तीन अलग-अलग मोड में काम कर सकता है:
सिंक्रोनस-लाइक मोड - बफ़रक्यू डिफ़ॉल्ट रूप से सिंक्रोनस-लाइक मोड में काम करता है, जिसमें निर्माता से आने वाला प्रत्येक बफर उपभोक्ता पर जाता है। इस मोड में कभी भी कोई बफ़र नहीं छोड़ा जाता है। और यदि निर्माता बहुत तेज़ है और बफ़र्स को ख़त्म करने की तुलना में तेज़ी से बनाता है, तो यह ब्लॉक हो जाएगा और मुफ़्त बफ़र्स की प्रतीक्षा करेगा।
नॉन-ब्लॉकिंग मोड - बफ़रक्यू नॉन-ब्लॉकिंग मोड में भी काम कर सकता है जहां यह उन मामलों में बफर की प्रतीक्षा करने के बजाय त्रुटि उत्पन्न करता है। इस मोड में कभी भी कोई बफ़र नहीं छोड़ा जाता है। यह एप्लिकेशन सॉफ़्टवेयर में संभावित गतिरोधों से बचने के लिए उपयोगी है जो ग्राफ़िक्स फ़्रेमवर्क की जटिल निर्भरता को नहीं समझ सकते हैं।
त्यागें मोड - अंत में, त्रुटियों को उत्पन्न करने या प्रतीक्षा करने के बजाय पुराने बफ़र्स को त्यागने के लिए बफ़रक्यू को कॉन्फ़िगर किया जा सकता है। उदाहरण के लिए, यदि जीएल रेंडरिंग को बनावट दृश्य में आयोजित किया जाता है और जितनी जल्दी हो सके ड्राइंग की जाती है, तो बफ़र्स को हटा दिया जाना चाहिए।
इस अधिकांश कार्य को संचालित करने के लिए, SurfaceFlinger एक अन्य OpenGL ES क्लाइंट के रूप में कार्य करता है। उदाहरण के लिए, जब SurfaceFlinger सक्रिय रूप से एक या दो बफर को तीसरे में संयोजित कर रहा है, तो यह OpenGL ES का उपयोग कर रहा है।
हार्डवेयर कंपोजर एचएएल बाकी आधे काम का संचालन करता है। यह HAL सभी Android ग्राफ़िक्स रेंडरिंग के लिए केंद्रीय बिंदु के रूप में कार्य करता है।