OpenGL è una grafica multipiattaforma. API che specifica un software standard per l'hardware di elaborazione grafica 3D. OpenGL ES è un sottoinsieme del Specifica OpenGL per i dispositivi incorporati.
Per essere compatibili con Android, i dispositivi è necessario fornire driver per EGL, OpenGL ES 1.x e OpenGL ES 2.0. Assistenza per OpenGL ES 3.x è facoltativo. Le considerazioni chiave includono:
- Assicurarsi che il driver GL sia robusto e conforme agli standard OpenGL ES.
- Consentire un numero illimitato di contesti GL. Poiché Android consente app in background e tenta di mantenere attivi i contesti GL, limitare il numero di contesti nel driver.
- Fare attenzione alla quantità di memoria allocata per ogni contesto, è comune avere 20-30 contesti GL attivi contemporaneamente.
- Supporto del formato dell'immagine YV12 e di altri formati di immagine YUV disponibili da altri componenti del sistema, come i codec multimediali o la videocamera.
- Supporto delle estensioni obbligatorie
EGL_KHR_wait_sync
,GL_OES_texture_external
,EGL_ANDROID_image_native_buffer
eEGL_ANDROID_recordable
. Inoltre, Hardware Composer v1.1 e superiori richiedonoEGL_ANDROID_framebuffer_target
.
Ti consigliamo vivamente di supportare anche EGL_ANDROID_blob_cache
,
EGL_KHR_fence_sync
e
EGL_ANDROID_native_fence_sync
.
Android 10 implementa l'interfaccia eSIM 1.5. Per informazioni sulle nuove funzionalità in EGL 1.5, consulta la specifica di Khronos Releases 1.5.
Caricamento del driver in corso...
Android si aspetta che le GPU disponibili per il sistema siano note quando il sistema
l'immagine generata automaticamente. I percorsi preferiti per i driver OpenGL ES a 32-bit e 64-bit sono:
/vendor/lib/egl
e /vendor/lib64/egl
rispettivamente.
Il loader utilizza due proprietà di sistema:
ro.hardware.egl
e ro.board.platform
o il valore esatto
per scoprire e caricare i driver di sistema. Il driver OpenGL ES deve essere
sono forniti in un file binario o suddivisi in tre file binari. Se la modalità OpenGL ES
che viene spedito in un unico file binario, usa uno dei seguenti nomi:
libGLES_${ro.hardware.egl}.so libGLES_${ro.board.platform}.so libGLES.so
Se il driver OpenGL ES viene distribuito in tre file binari, utilizza uno dei i seguenti set di nomi:
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
Livelli OpenGL ES
Android 10 introduce un sistema di livelli per GLES 2.0 e versioni successive. I livelli GLES sono oggetti condivisi disponibili all'interno delle app o forniti i nostri strumenti. I livelli GLES consentono alle app di cui è possibile eseguire il debug di scoprire e caricare i livelli utilizzando gli stessi meccanismi di configurazione Vulkan.
GLES LayerLoader, un componente all'interno del caricatore EGL, identifica i livelli GLES.
Per ogni livello trovato da GLES LayerLoader, viene trovato il componente GLES LayerLoader
chiama AndroidGLESLayer_Initialize
, gestisce gli elenchi di funzioni di libEGL,
e chiama AndroidGLESLayer_GetProcAddress
per tutte le funzioni note.
Se il livello intercetta una funzione, ne tiene traccia l'indirizzo.
Se il livello non intercetta una funzione,
AndroidGLESLayer_GetProcAddress
restituisce la stessa funzione
a cui è stato trasmesso. LayerLoader aggiorna l'elenco di hook delle funzioni
punta al punto di ingresso del livello.
Abilita i livelli
Puoi attivare i livelli GLES per app o a livello globale. Impostazioni per app vengono mantenuti tra i riavvii, mentre le proprietà globali vengono cancellate al riavvio.
Per attivare i livelli per app:
# 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
Per disattivare i livelli per app:
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
Per attivare i livelli a livello globale:
# Attempts to load layers for all applications, including native executables
adb shell setprop debug.gles.layers layer1:layer2:...:layerN
Livelli di test
I livelli GLES sono supportati dai CTS di Android e sono necessari per superare i test CTS per
dispositivi compatibili. a identificare se gli strati
stai lavorando su un dispositivo, esegui $ atest CtsGpuToolsHostTestCases
.