OpenGL es un entorno de gráficos multiplataforma API que especifica un software estándar para hardware de procesamiento de gráficos 3D. OpenGL ES es un subconjunto de la especificación de OpenGL para dispositivos incorporados.
Para ser compatibles con Android, los dispositivos deben proporcionar controladores para EGL, OpenGL ES 1.x y OpenGL ES 2.0. Asistencia para OpenGL ES 3.x es opcional. Las consideraciones clave incluyen lo siguiente:
- Garantizar que el controlador de GL sea sólido y cumpla con los estándares de OpenGL ES
- Se permite una cantidad ilimitada de contextos de GL. Como Android permite apps en segundo plano e intenta mantener activos los contextos de GL, limitar la cantidad de contextos en tu conductor.
- Tener en cuenta la cantidad de memoria asignada a cada contexto, porque es común tener entre 20 y 30 contextos de GL activos a la vez.
- Admite el formato de imagen YV12 y otros formatos de imagen YUV que provienen de otros componentes del sistema, como los códecs multimedia o la cámara.
- Compatibilidad con las extensiones obligatorias
EGL_KHR_wait_sync
,GL_OES_texture_external
:EGL_ANDROID_image_native_buffer
yEGL_ANDROID_recordable
Además, Hardware Composer v1.1 y versiones posteriores requieren el elementoEGL_ANDROID_framebuffer_target
.
Te recomendamos que también admitas EGL_ANDROID_blob_cache
,
EGL_KHR_fence_sync
y
EGL_ANDROID_native_fence_sync
Android 10 implementa la interfaz EGL 1.5. Para obtener información sobre las funciones nuevas de EGL 1.5, consulta la especificación de la versión 1.5 de Khronos.
Carga del controlador
Android espera que se conozcan las GPU disponibles para el sistema cuando este
cómo se compila esta imagen. Las rutas preferidas para los controladores de OpenGL ES de 32 y 64 bits son las siguientes:
/vendor/lib/egl
y /vendor/lib64/egl
respectivamente.
El cargador usa dos propiedades del sistema, ro.hardware.egl
y ro.board.platform
, o el nombre exacto para descubrir y cargar los controladores del sistema. El controlador de OpenGL ES se debe enviar en un objeto binario o dividir en tres. Si el controlador de OpenGL ES se envía en un objeto binario, usa uno de los siguientes nombres:
libGLES_${ro.hardware.egl}.so libGLES_${ro.board.platform}.so libGLES.so
Si el controlador de OpenGL ES se envía en tres objetos binarios, usa uno de los los siguientes conjuntos de nombres:
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
Capas de OpenGL ES
Android 10 presenta un sistema de capas para GLES 2.0 o superior. Las capas de GLES son objetos compartidos disponibles dentro de las apps o proporcionados por con herramientas de visualización. Las capas de GLES permiten que las apps depurables detecten y carguen capas con los mismos mecanismos de configuración que Vulkan.
GLES LayerLoader, un componente del cargador EGL, identifica capas de GLES.
Por cada capa que GLES LayerLoader encuentra, llama a AndroidGLESLayer_Initialize
, recorre las listas de funciones de libEGL y llama a AndroidGLESLayer_GetProcAddress
para todas las funciones conocidas.
Si la capa intercepta una función, hace un seguimiento de la dirección de la función.
Si la capa no intercepta una función, AndroidGLESLayer_GetProcAddress
muestra la misma dirección de función que le pasaron. Luego, LayerLoader actualiza la lista de hooks de funciones a
apuntan al punto de entrada de la capa.
Cómo habilitar las capas
Puedes habilitar esas capas por app o de forma global. La configuración por app persiste después de los reinicios, mientras que las propiedades globales se borran.
Para habilitar las capas por app, haz lo siguiente:
# Enable layersadb shell settings put global enable_gpu_debug_layers 1
# Specify target appadb shell settings put global gpu_debug_app
# Specify layer list (from top to bottom)package_name adb shell settings put global gpu_debug_layers_gles
# Specify packages to search for layerslayer1 :layer2 :... :layerN adb shell settings put global gpu_debug_layer_app
package1 :package2 :... :packageN
Para inhabilitar las capas por app, haz lo siguiente:
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
Para habilitar las capas de forma global, sigue estos pasos:
# Attempts to load layers for all applications, including native executables
adb shell setprop debug.gles.layers layer1 :layer2 :... :layerN
Capas de prueba
Las capas de GLES están respaldadas por el CTS de Android y deben pasar las pruebas del CTS para
dispositivos compatibles. Para identificar si las capas
funcionan en un dispositivo, ejecuta $ atest CtsGpuToolsHostTestCases
.