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 del Especificación de OpenGL para dispositivos incorporados.
Para ser compatibles con Android, los dispositivos 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 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.
- Compatibilidad con el formato de imagen YV12 y otros formatos de imagen YUV que vienen de otros componentes del sistema, como 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.
Cargando 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 mismo
para descubrir y cargar los controladores del sistema. El controlador de OpenGL ES debe tener
enviarse en un objeto binario o dividirse en tres. Si la biblioteca OpenGL ES
El controlador 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 apps depurables descubran y carguen capas con el con los mismos mecanismos de configuración Vulkan
GLES LayerLoader, un componente del cargador EGL, identifica capas de GLES.
Por cada capa que GLES LayerLoader encuentra, el LayerLoader de GLES
llama a AndroidGLESLayer_Initialize
, recorre la lista 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 función.
dirección de correo electrónico. 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. Configuración por app persisten 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 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
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
.