OpenGL est une solution d'images multiplates-formes API spécifiant un logiciel standard pour le matériel de traitement graphique 3D. OpenGL ES est un sous-ensemble Spécification OpenGL pour les appareils intégrés.
Pour être compatibles avec Android, les appareils doivent fournir des pilotes pour EGL, OpenGL ES 1.x et OpenGL ES 2.0. Assistance pour OpenGL ES 3.x est facultative. Voici les points clés à prendre en compte:
- S'assurer que le pilote GL est robuste et conforme aux normes OpenGL ES.
- Autoriser un nombre illimité de contextes GL. Android permet en arrière-plan et essaie de maintenir actifs les contextes GL, vous ne devez pas Limitez le nombre de contextes dans votre conducteur.
- Tenez compte de la quantité de mémoire allouée à chaque contexte, car il est courant d'avoir 20 à 30 contextes GL actifs à la fois.
- Prise en charge du format d'image YV12 et des autres formats d'image YUV disponibles à partir d'autres composants du système, tels que les codecs multimédias ou l'appareil photo.
- Prendre en charge les extensions obligatoires
EGL_KHR_wait_sync
,GL_OES_texture_external
,EGL_ANDROID_image_native_buffer
etEGL_ANDROID_recordable
En outre, Hardware Composer v1.1 et supérieurs nécessitentEGL_ANDROID_framebuffer_target
. .
Nous vous recommandons vivement d'accepter également EGL_ANDROID_blob_cache
,
EGL_KHR_fence_sync
EGL_ANDROID_native_fence_sync
Android 10 implémente l'interface EGL 1.5. Pour en savoir plus sur les nouvelles fonctionnalités EGL 1.5, reportez-vous à la spécification Khronos Releases 1.5.
Chargement du pilote...
Android s'attend à ce que les GPU disponibles pour le système soient connus lorsque celui-ci
est générée. Les chemins privilégiés pour les pilotes OpenGL ES 32 bits et 64 bits sont les suivants :
/vendor/lib/egl
et /vendor/lib64/egl
, respectivement.
Le loader utilise deux propriétés système :
ro.hardware.egl
et ro.board.platform
, ou le mot clé exact
pour découvrir et charger
les pilotes système. Le pilote OpenGL ES doit être
livrés en un binaire ou divisés en trois binaires. Si OpenGL ES
est envoyé dans un binaire, utilisez l'un des noms suivants:
libGLES_${ro.hardware.egl}.so libGLES_${ro.board.platform}.so libGLES.so
Si le pilote OpenGL ES est livré dans trois binaires, utilisez l'un des les ensembles de noms suivants:
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
Couches OpenGL ES
Android 10 introduit un système de superposition pour GLES 2.0 et versions ultérieures. Les couches GLES sont des objets partagés disponibles depuis des applications ou fournis par outils. Les couches GLES permettent aux applications débogables de découvrir et de charger des couches à l'aide du les mêmes mécanismes de configuration que Vulkan :
Le composant LayerLoader GLES, qui fait partie du chargeur EGL, identifie les couches GLES.
Pour chaque couche que GLES trouve, le composant LayerLoader GLES
appelle AndroidGLESLayer_Initialize
, parcourt les listes de fonctions libEGL,
et appelle AndroidGLESLayer_GetProcAddress
pour toutes les fonctions connues.
Si la couche intercepte une fonction, elle suit l'adresse de cette fonction.
Si la couche n’intercepte pas de fonction,
AndroidGLESLayer_GetProcAddress
renvoie la même fonction
l'adresse à laquelle elle a été transmise. Le LayerLoader met ensuite à jour la liste de hook de fonction comme suit :
point vers le point d'entrée du calque.
Activer les couches
Vous pouvez activer les couches GLES pour une application ou de manière globale. Paramètres par application sont conservées lors des redémarrages, tandis que les propriétés globales sont effacées au redémarrage.
Pour activer les couches par application:
# 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
Pour désactiver les couches par application:
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
Pour activer les couches de manière globale:
# Attempts to load layers for all applications, including native executables
adb shell setprop debug.gles.layers layer1:layer2:...:layerN
Calques de test
Les couches GLES reposent sur Android CTS et doivent réussir les tests CTS pour
appareils compatibles. Pour déterminer si les couches
travaillent sur un appareil, exécutez $ atest CtsGpuToolsHostTestCases
.