Google se compromete a impulsar la igualdad racial para las comunidades afrodescendientes. Obtén información al respecto.
Se usó la API de Cloud Translation para traducir esta página.
Switch to English

Implementación de OpenGL ES y EGL

OpenGL es una API de gráficos multiplataforma que especifica una interfaz de software estándar para hardware de procesamiento de gráficos 3D. OpenGL ES es un subconjunto de la especificación OpenGL para dispositivos integrados.

Para ser compatibles con Android, los dispositivos deben proporcionar controladores para EGL, OpenGL ES 1.xy OpenGL ES 2.0. La compatibilidad con OpenGL ES 3.x es opcional. Las consideraciones clave incluyen:

  • Asegurarse de que el controlador GL sea robusto y se ajuste a los estándares OpenGL ES.
  • Permitiendo un número ilimitado de contextos GL. Debido a que Android permite aplicaciones en segundo plano e intenta mantener vivos los contextos GL, no debe limitar la cantidad de contextos en su controlador.
  • Tener en cuenta la cantidad de memoria asignada para cada contexto, porque es común tener entre 20 y 30 contextos 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 de medios o la cámara.
  • Compatible con las extensiones obligatorias EGL_KHR_wait_sync , GL_OES_texture_external , EGL_ANDROID_image_native_buffer y EGL_ANDROID_recordable . Además, Hardware Composer v1.1 y EGL_ANDROID_framebuffer_target posteriores requieren la extensión EGL_ANDROID_framebuffer_target .

Se recomienda encarecidamente que también sea compatible con 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 nuevas funciones de EGL 1.5, consulte la Especificación Khronos Releases 1.5 .

Carga del controlador

Android espera que se conozcan las GPU disponibles para el sistema cuando se cree la imagen del sistema. Las rutas preferidas para los controladores OpenGL ES de 32 y 64 bits son /vendor/lib/egl y /vendor/lib64/egl respectivamente. El cargador utiliza 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 OpenGL ES debe enviarse en un binario o dividido en tres binarios. Si el controlador OpenGL ES se envía en un binario, use uno de los siguientes nombres:

libGLES_${ro.hardware.egl}.so
libGLES_${ro.board.platform}.so
libGLES.so

Si el controlador OpenGL ES se envía en tres binarios, use uno de 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+. Las capas GLES son objetos compartidos disponibles desde aplicaciones o proporcionados por herramientas. Las capas GLES permiten que las aplicaciones depurables descubran y carguen capas utilizando los mismos mecanismos de configuración que Vulkan .

GLES LayerLoader, un componente dentro del cargador EGL, identifica las capas GLES. Para cada capa que encuentra GLES LayerLoader, GLES LayerLoader 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, rastrea la dirección de la función. Si la capa no intercepta una función, AndroidGLESLayer_GetProcAddress devuelve la misma dirección de función que se le pasó. El LayerLoader luego actualiza la lista de enlaces de funciones para que apunte al punto de entrada de la capa.

Habilitación de capas

Puede habilitar capas GLES por aplicación o globalmente. La configuración por aplicación persiste durante los reinicios, mientras que las propiedades globales se borran al reiniciar.

Para habilitar capas por aplicación :

# Enable layers
adb shell settings put global enable_gpu_debug_layers 1

# Specify target app
adb 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 layers
adb shell settings put global gpu_debug_layer_app package1:package2:...:packageN

Para deshabilitar capas por aplicación :

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 capas globalmente :

# Attempts to load layers for all applications, including native executables
adb shell setprop debug.gles.layers layer1:layer2:...:layerN

Prueba de capas

Las capas GLES están respaldadas por Android CTS y deben aprobar las pruebas CTS para dispositivos compatibles . Para identificar si las capas están funcionando en un dispositivo, ejecute $ atest CtsGpuToolsHostTestCases .