ओपनजीएल एक क्रॉस-प्लेटफ़ॉर्म ग्राफ़िक्स एपीआई है जो 3डी ग्राफ़िक्स प्रोसेसिंग हार्डवेयर के लिए एक मानक सॉफ़्टवेयर इंटरफ़ेस निर्दिष्ट करता है। ओपनजीएल ईएस एम्बेडेड उपकरणों के लिए ओपनजीएल विनिर्देश का एक सबसेट है।
एंड्रॉइड संगत होने के लिए, उपकरणों को ईजीएल, ओपनजीएल ईएस 1.x और ओपनजीएल ईएस 2.0 के लिए ड्राइवर प्रदान करने की आवश्यकता है। OpenGL ES 3.x के लिए समर्थन वैकल्पिक है। मुख्य विचारों में शामिल हैं:
- यह सुनिश्चित करना कि GL ड्राइवर मजबूत है और OpenGL ES मानकों के अनुरूप है।
- असीमित संख्या में GL संदर्भों की अनुमति देना। चूँकि एंड्रॉइड पृष्ठभूमि में ऐप्स की अनुमति देता है और जीएल संदर्भों को जीवित रखने की कोशिश करता है, इसलिए आपको अपने ड्राइवर में संदर्भों की संख्या सीमित नहीं करनी चाहिए।
- प्रत्येक संदर्भ के लिए आवंटित मेमोरी की मात्रा का ध्यान रखें, क्योंकि एक बार में 20-30 सक्रिय जीएल संदर्भ होना आम बात है।
- YV12 छवि प्रारूप और अन्य YUV छवि प्रारूपों का समर्थन करना जो सिस्टम में अन्य घटकों से आते हैं, जैसे मीडिया कोडेक्स या कैमरा।
- अनिवार्य एक्सटेंशन
EGL_KHR_wait_sync
,GL_OES_texture_external
,EGL_ANDROID_image_native_buffer
औरEGL_ANDROID_recordable
समर्थन करना। इसके अतिरिक्त, हार्डवेयर कंपोज़र v1.1 और उच्चतर कोEGL_ANDROID_framebuffer_target
एक्सटेंशन की आवश्यकता होती है।
EGL_ANDROID_blob_cache
, EGL_KHR_fence_sync
और EGL_ANDROID_native_fence_sync
का भी समर्थन करने की अत्यधिक अनुशंसा की जाती है।
एंड्रॉइड 10 ईजीएल 1.5 इंटरफ़ेस लागू करता है। ईजीएल 1.5 में नई सुविधाओं की जानकारी के लिए, ख्रोनोस रिलीज़ 1.5 विशिष्टता देखें।
ड्राइवर लोड हो रहा है
एंड्रॉइड को उम्मीद है कि सिस्टम इमेज बनने पर सिस्टम के लिए उपलब्ध जीपीयू का पता चल जाएगा। 32-बिट और 64-बिट ओपनजीएल ईएस ड्राइवरों के लिए पसंदीदा पथ क्रमशः /vendor/lib/egl
और /vendor/lib64/egl
हैं। लोडर सिस्टम ड्राइवरों को खोजने और लोड करने के लिए दो सिस्टम गुणों, ro.hardware.egl
और ro.board.platform
, या सटीक नाम का उपयोग करता है। ओपनजीएल ईएस ड्राइवर को या तो एक बाइनरी में भेजा जाना चाहिए या तीन बाइनरी में विभाजित किया जाना चाहिए। यदि OpenGL ES ड्राइवर को एक बाइनरी में भेजा जाता है, तो निम्न नामों में से किसी एक का उपयोग करें:
libGLES_${ro.hardware.egl}.so libGLES_${ro.board.platform}.so libGLES.so
यदि OpenGL ES ड्राइवर को तीन बायनेरिज़ में भेजा गया है, तो निम्न नाम सेटों में से एक का उपयोग करें:
libEGL_${ro.hardware.egl}.so libGLESv1_CM_${ro.hardware.egl}.so libGLESv2_${ro.hardware.egl}.so libEGL_${ro.board.platform}.so libGLESv1_CM_${ro.board.platform}.so libGLESv2_${ro.board.platform}.so libEGL.so libGLESv1_CM.so libGLESv2.so
ओपनजीएल ईएस परतें
Android 10 GLES 2.0+ के लिए एक लेयरिंग सिस्टम पेश करता है। जीएलईएस परतें साझा की गई वस्तुएं हैं जो ऐप्स के भीतर उपलब्ध होती हैं या टूल द्वारा प्रदान की जाती हैं। जीएलईएस परतें डिबग करने योग्य ऐप्स को वल्कन के समान सेटअप तंत्र का उपयोग करके परतों को खोजने और लोड करने में सक्षम बनाती हैं।
जीएलईएस लेयरलोडर, ईजीएल लोडर के भीतर एक घटक, जीएलईएस परतों की पहचान करता है। GLES LayerLoader द्वारा खोजी गई प्रत्येक परत के लिए, GLES LayerLoader AndroidGLESLayer_Initialize
को कॉल करता है, libEGL की फ़ंक्शन सूचियों पर चलता है, और सभी ज्ञात फ़ंक्शन के लिए AndroidGLESLayer_GetProcAddress
कॉल करता है। यदि परत किसी फ़ंक्शन को इंटरसेप्ट करती है, तो यह फ़ंक्शन के पते को ट्रैक करती है। यदि परत किसी फ़ंक्शन को इंटरसेप्ट नहीं करती है, AndroidGLESLayer_GetProcAddress
वही फ़ंक्शन पता लौटाता है जिसे पास किया गया था। लेयरलोडर फिर परत के प्रवेश बिंदु को इंगित करने के लिए फ़ंक्शन हुक सूची को अपडेट करता है।
परतें सक्षम करें
आप जीएलईएस परतों को प्रति ऐप या विश्व स्तर पर सक्षम कर सकते हैं। प्रति-ऐप सेटिंग्स रिबूट के दौरान बनी रहती हैं, जबकि वैश्विक गुण रिबूट पर साफ़ हो जाते हैं।
प्रति ऐप परतें सक्षम करने के लिए:
# Enable layersadb shell settings put global enable_gpu_debug_layers 1
# Specify target appadb shell settings put global gpu_debug_app package_name
# Specify layer list (from top to bottom)adb shell settings put global gpu_debug_layers_gles layer1:layer2:...:layerN
# Specify packages to search for layersadb shell settings put global gpu_debug_layer_app package1:package2:...:packageN
प्रति ऐप परतों को अक्षम करने के लिए:
adb shell settings delete global enable_gpu_debug_layers
adb shell settings delete global gpu_debug_app
adb shell settings delete global gpu_debug_layer_app
विश्व स्तर पर परतों को सक्षम करने के लिए:
# Attempts to load layers for all applications, including native executables
adb shell setprop debug.gles.layers layer1:layer2:...:layerN
परतों का परीक्षण करें
जीएलईएस परतें एंड्रॉइड सीटीएस द्वारा समर्थित हैं और संगत उपकरणों के लिए सीटीएस परीक्षण पास करना आवश्यक है। यह पहचानने के लिए कि क्या परतें किसी डिवाइस पर काम कर रही हैं, $ atest CtsGpuToolsHostTestCases
चलाएँ।