OpenGL to wieloplatformowy interfejs API do obsługi grafiki, który określa standardowy interfejs oprogramowania do obsługi sprzętu do przetwarzania grafiki 3D. OpenGL ES jest podzbiorem Specyfikacja OpenGL dla urządzeń umieszczonych na stronie.
Urządzenia muszą być zgodne z Androidem muszą pobrać sterowniki EGL, OpenGL ES 1.x i OpenGL ES 2.0. Wsparcie dla trybu OpenGL ES 3.x jest opcjonalna. Najważniejsze kwestie:
- zapewnienie, że sterownik GL jest niezawodny i zgodny ze standardami OpenGL ES;
- zezwalanie na nieograniczoną liczbę kontekstów GL. Android pozwala aplikacji w tle i stara się utrzymywać konteksty GL, nie należy ogranicz liczbę kontekstów w sterowniku.
- Zwracanie uwagi na ilość pamięci przydzielonej do każdego kontekstu, ponieważ często ma 20–30 aktywnych kontekstów GL jednocześnie.
- Obsługa formatu obrazu YV12 i innych formatów obrazu YUV pochodzących z innych komponentów systemu, takich jak kodeki multimedialne lub kamera.
- Obsługa obowiązkowych rozszerzeń
EGL_KHR_wait_sync
,GL_OES_texture_external
,EGL_ANDROID_image_native_buffer
iEGL_ANDROID_recordable
Dodatkowo w wersji 1.1 i nowszych rozszerzenia kompozytora sprzętowego wymagane jest rozszerzenieEGL_ANDROID_framebuffer_target
.
Zdecydowanie zalecamy też obsługę tych komponentów: EGL_ANDROID_blob_cache
,
EGL_KHR_fence_sync
i
EGL_ANDROID_native_fence_sync
Android 10 implementuje interfejs EGL 1.5. Informacje o nowych funkcjach w EGL 1.5 znajdziesz w specyfikacji 1.5 Khronos.
Wczytuję dane kierowcy
Android oczekuje, że procesory graficzne dostępne dla systemu będą znane, gdy system
gdy tworzony jest obraz. Preferowane ścieżki dla 32- i 64-bitowych sterowników OpenGL ES to odpowiednio /vendor/lib/egl
i /vendor/lib64/egl
.
Moduł ładowania wykorzystuje 2 właściwości systemowe:
ro.hardware.egl
i ro.board.platform
lub dokładnie
by wykryć i wczytać sterowniki systemu. Sterownik OpenGL ES musi być
mogą być wysyłane w jednym pliku binarnym lub podzielone na trzy pliki binarne. Jeśli interfejs OpenGL ES
sterownik jest dostarczany w jednym pliku binarnym, użyj jednej z następujących nazw:
libGLES_${ro.hardware.egl}.so libGLES_${ro.board.platform}.so libGLES.so
Jeśli sterownik OpenGL ES jest przesłany do trzech plików binarnych, użyj jednego z następujące zestawy nazw:
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
Warstwy OpenGL ES
Android 10 wprowadza system warstw dla GLES 2.0 i nowszych. Warstwy GLES to współdzielone obiekty dostępne w aplikacjach lub udostępniane przez narzędzia. Warstwy GLES umożliwiają aplikacjom z możliwością debugowania wykrywanie i wczytywanie warstw za pomocą tych samych mechanizmów konfiguracji co Vulkan.
GLES LayerLoader, komponent w ładowarce EGL, identyfikuje warstwy GLES.
W przypadku każdej warstwy znalezionej przez komponent GLES LayerLoader klasa GLES LayerLoader
wywołuje AndroidGLESLayer_Initialize
, pokazuje listy funkcji libEGL,
i wywołuje AndroidGLESLayer_GetProcAddress
, by pobrać wszystkie znane funkcje.
Jeśli warstwa przechwytuje funkcję, śledzi jej adres.
Jeśli warstwa nie przechwyci funkcji, AndroidGLESLayer_GetProcAddress
zwróci ten sam adres funkcji, który został przekazany. Następnie komponent LayerLoader aktualizuje listę punktów zaczepienia funkcji do
i wskaż punkt wejścia warstwy.
Włącz warstwy
Warstwy GLES możesz włączyć na poziomie aplikacji lub globalnie. Ustawienia poszczególnych aplikacji są zachowywane po ponownym uruchomieniu, podczas gdy właściwości globalne są usuwane po ponownym uruchomieniu.
Aby włączyć warstwy na poziomie aplikacji:
# 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
Aby wyłączyć warstwy w poszczególnych aplikacjach:
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
Aby włączyć warstwy globalnie:
# Attempts to load layers for all applications, including native executables
adb shell setprop debug.gles.layers layer1:layer2:...:layerN
Warstwy testowe
Warstwy GLES są obsługiwane przez Android CTS i muszą przejść testy CTS na zgodnych urządzeniach. Aby określić, czy warstwy
pracują na urządzeniu, uruchom $ atest CtsGpuToolsHostTestCases
.