OpenGL هي واجهة برمجة تطبيقات للرسومات على عدة أنظمة أساسية تحدِّد واجهة برمجية قياسية لأجهزة معالجة الرسومات الثلاثية الأبعاد. OpenGL ES هي مجموعة فرعية من مواصفات OpenGL للأجهزة المضمّنة.
لكي تكون الأجهزة متوافقة مع Android، يجب أن تشمل برامج تشغيل EGL وOpenGL ES 1.x وOpenGL ES 2.0. إنّ إتاحة استخدام OpenGL ES 3.x اختيارية. تشمل الاعتبارات الرئيسية ما يلي:
- التأكّد من أنّ برنامج تشغيل GL قوي ومتوافق مع معايير OpenGL ES
- السماح بعدد غير محدود من سياقات GL بما أنّ نظام التشغيل Android يسمح للتطبيقات بالعمل في الخلفية ويحاول إبقاء سياقات GL نشطة، يجب عدم الحد من عدد السياقات في برنامج التشغيل.
- يجب الانتباه إلى مقدار الذاكرة المخصّصة لكل سياق، لأنّه من الشائع أن يكون لديك من 20 إلى 30 سياقًا نشِطًا للشبكة الإعلانية على Google في الوقت نفسه.
- إتاحة تنسيق الصورة YV12 وتنسيقات الصور الأخرى بتنسيق YUV التي تأتي من مكوّنات أخرى في النظام، مثل برامج ترميز الوسائط أو الكاميرا
- أن تتيح الإضافات الإلزامية
EGL_KHR_wait_sync
وGL_OES_texture_external
وEGL_ANDROID_image_native_buffer
وEGL_ANDROID_recordable
بالإضافة إلى ذلك، يتطلب الإصدار 1.1 من "أداة إنشاء الأجهزة" والإصدارات الأحدث إضافةEGL_ANDROID_framebuffer_target
.
ننصح بشدة بتوفير EGL_ANDROID_blob_cache
EGL_KHR_fence_sync
EGL_ANDROID_native_fence_sync
أيضًا.
ينفِّذ نظام التشغيل Android 10 واجهة EGL 1.5. للحصول على معلومات عن الميزات الجديدة في EGL 1.5، اطّلِع على مواصفات الإصدار 1.5 من Khronos.
تحميل برنامج تشغيل
يتوقّع نظام Android أن تكون وحدات معالجة الرسومات المتاحة للنظام معروفة عند إنشاء
صورة النظام. المسارات المفضّلة لبرامج تشغيل OpenGL ES بإصدار 32 بت و64 بت هي
/vendor/lib/egl
و/vendor/lib64/egl
على التوالي.
يستخدم المحمِّل سمتَي نظام،
ro.hardware.egl
وro.board.platform
، أو
الاسم الدقيق لاكتشاف برامج تشغيل النظام وتحميلها. يجب إرسال برنامج تشغيل OpenGL ES
في ملف ثنائي واحد أو تقسيمه إلى ثلاثة ملفات ثنائية. إذا تم شحن ملف تشغيل 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
طبقات OpenGL ES
يقدّم نظام التشغيل Android 10 نظامًا للطبقات لواجهة برمجة التطبيقات GLES 2.0 والإصدارات الأحدث. وطبقات GLES هي عناصر مشترَكة متاحة من داخل التطبيقات أو تقدّمها الأدوات. تتيح طبقات GLES للتطبيقات القابلة لتصحيح الأخطاء اكتشاف الطبقات وتحميلها باستخدام آليات الإعداد نفسها المستخدَمة في Vulkan.
يحدِّد GLES LayerLoader، وهو مكوّن ضمن أداة تحميل EGL، طبقات GLES.
لكل طبقة يعثر عليها GLES LayerLoader، يُطلِق AndroidGLESLayer_Initialize
، وينتقل في قوائم دوال libEGL، ويُطلِق AndroidGLESLayer_GetProcAddress
لجميع الدوال المعروفة.
إذا اعترضت الطبقة دالة، تتتبّع عنوان الدالة.
إذا لم تعترض الطبقة دالة، تعرِض AndroidGLESLayer_GetProcAddress
عنوان الدالة
نفسه الذي تم تمريره. بعد ذلك، يعدّل LayerLoader قائمة ربط الدوال لتهدف إلى
الإشارة إلى نقطة دخول الطبقة.
تفعيل الطبقات
يمكنك تفعيل طبقات GLES لكل تطبيق أو على مستوى النظام. تظل الإعدادات الخاصة بكل تطبيق محفوظة عند إعادة التشغيل، في حين يتم محو الخصائص العامة عند إعادة التشغيل.
لتفعيل الطبقات لكل تطبيق:
# 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
طبقات الاختبار
تتوافق طبقات GLES مع مجموعة أدوات اختبار التوافق (CTS) في Android، ويجب أن تجتاز اختبارات CTS على
الأجهزة المتوافقة. لتحديد ما إذا كانت الطبقات
تعمل على جهاز، شغِّل $ atest CtsGpuToolsHostTestCases
.