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 سياق GL نشط في الوقت نفسه.
- تتيح هذه السمة استخدام تنسيق الصور YV12 وتنسيقات صور YUV الأخرى التي تأتي من مكونات أخرى في النظام، مثل برامج ترميز الوسائط أو الكاميرا.
- توفير الدعم للإضافات الإلزامية
EGL_KHR_wait_syncوGL_OES_texture_externalوEGL_ANDROID_image_native_bufferوEGL_ANDROID_recordableبالإضافة إلى ذلك، يتطلّب الإصدار 1.1 من Hardware Composer والإصدارات الأحدث استخدام الإضافةEGL_ANDROID_framebuffer_target.
ننصحك بشدة بتوفير دعم للغات EGL_ANDROID_blob_cache وEGL_KHR_fence_sync وEGL_ANDROID_native_fence_sync أيضًا.
يتضمّن الإصدار 10 من نظام التشغيل Android واجهة EGL 1.5. للحصول على معلومات حول الميزات الجديدة في الإصدار 1.5 من EGL، يُرجى الاطّلاع على مواصفات الإصدار 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، يستدعي 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_layersadb shell settings delete global gpu_debug_appadb 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.