OpenGL ist eine plattformübergreifende Grafik API, die eine Standardsoftware angibt für Hardware zur 3D-Grafikverarbeitung. OpenGL ES ist eine Teilmenge der OpenGL-Spezifikation für eingebettete Geräte.
Um mit Android kompatibel zu sein, müssen Geräte benötigen Treiber für EGL, OpenGL ES 1.x und OpenGL ES 2.0. Support für OpenGL ES 3.x ist optional. Wichtige Überlegungen sind:
- Der GL-Treiber muss robust sein und den OpenGL ES-Standards entsprechen.
- Es wird eine unbegrenzte Anzahl von GL-Kontexten unterstützt. Weil Android es und versucht, GL-Kontexte lebendig zu halten. die Anzahl der Kontexte in Ihrem Treiber beschränken.
- Achten Sie auf die Menge an Arbeitsspeicher, der jedem Kontext zugewiesen ist, ist es üblich, 20 bis 30 aktive GL-Kontexte gleichzeitig zu haben.
- Unterstützung des YV12-Bildformats und anderer YUV-Bildformate, die von anderen Komponenten im System stammen, z. B. von Medien-Codecs oder der Kamera.
- Unterstützung der obligatorischen Erweiterungen
EGL_KHR_wait_sync
,GL_OES_texture_external
,EGL_ANDROID_image_native_buffer
undEGL_ANDROID_recordable
Außerdem ist für Hardware Composer 1.1 und höher dieEGL_ANDROID_framebuffer_target
-Erweiterung erforderlich.
Wir empfehlen dringend, auch EGL_ANDROID_blob_cache
, EGL_KHR_fence_sync
und EGL_ANDROID_native_fence_sync
zu unterstützen.
Android 10 implementiert die EGL 1.5-Schnittstelle. Informationen zu den neuen Funktionen in EGL 1.5 finden Sie in der Khronos Releases 1.5 Specification.
Treiber wird geladen
Android erwartet, dass die für das System verfügbaren GPUs beim Erstellen des System-Images bekannt sind. Die bevorzugten Pfade für 32-Bit- und 64-Bit-OpenGL ES-Treiber sind /vendor/lib/egl
bzw. /vendor/lib64/egl
.
Der Ladeprogramm verwendet zwei Systemeigenschaften, ro.hardware.egl
und ro.board.platform
, oder den genauen Namen, um die Systemtreiber zu finden und zu laden. Der OpenGL ES-Treiber muss entweder in einer Binärdatei oder in drei Binärdateien bereitgestellt werden. Wenn der OpenGL ES-Treiber in einer Binärdatei bereitgestellt wird, verwenden Sie einen der folgenden Namen:
libGLES_${ro.hardware.egl}.so libGLES_${ro.board.platform}.so libGLES.so
Wenn der OpenGL ES-Treiber in drei Binärprogramme geliefert wird, verwenden Sie eine der folgenden Namenssätzen:
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
OpenGL ES-Ebenen
Android 10 führt ein Schichtsystem für GLES 2.0 und höher ein. GLES-Schichten sind freigegebene Objekte, die in Apps verfügbar sind oder von Tools bereitgestellt werden. Mit GLES-Ebenen können debierbare Apps mit denselben Einrichtungsmechanismen wie Vulkan Ebenen erkennen und laden.
GLES LayerLoader, eine Komponente innerhalb des EGL Loaders, identifiziert GLES-Ebenen.
Für jede Ebene, die der GLES-LayerLoader findet,
AndroidGLESLayer_Initialize
aufruft, die Funktionslisten von libEGL durchläuft
und ruft AndroidGLESLayer_GetProcAddress
für alle bekannten Funktionen auf.
Wenn die Ebene eine Funktion abfängt, verfolgt sie die Adresse der Funktion.
Wenn die Schicht keine Funktion abfängt,
AndroidGLESLayer_GetProcAddress
gibt dieselbe Funktion zurück.
Adresse, die übergeben wurde. Der LayerLoader aktualisiert dann die Funktion-Hook-Liste, sodass sie auf den Einstiegspunkt der Ebene verweist.
Ebenen aktivieren
Sie können GLES-Ebenen entweder pro App oder global aktivieren. App-spezifische Einstellungen bleiben auch nach einem Neustart erhalten, während globale Eigenschaften beim Neustart gelöscht werden.
So aktivieren Sie Ebenen pro 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
So deaktivieren Sie Ebenen pro 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
So aktivieren Sie Ebenen global:
# Attempts to load layers for all applications, including native executables
adb shell setprop debug.gles.layers layer1:layer2:...:layerN
Testebenen
GLES-Ebenen werden von Android CTS unterstützt und sind erforderlich, um CTS-Tests für
kompatiblen Geräten zu installieren. Führen Sie $ atest CtsGpuToolsHostTestCases
aus, um zu prüfen, ob Ebenen auf einem Gerät funktionieren.