OpenGL 是跨平台圖形 指定標準軟體的 API 3D 圖形處理硬體的介面OpenGL ES 是 嵌入式裝置的 OpenGL 規格。
需與 Android 相容的裝置 需要為 EGL、OpenGL ES 1.x 和 OpenGL ES 2.0 的驅動程式。支援 OpenGL ES 3.x 為選用項目。重要注意事項包括:
- 確保 GL 驅動程式穩定且符合 OpenGL ES 標準。
- 允許不限數量的 GL 情境。由於 Android 應用程式,並嘗試讓 GL 情境保持運作, 限制駕駛員的情境數量。
- 請留意分配給每個結構定義的記憶體量 一般而言,同時有 20 到 30 個使用中的 GL 情境。
- 支援 YV12 圖片格式,以及日後 例如媒體轉碼器或相機等。
- 支援必要擴充功能
EGL_KHR_wait_sync
,GL_OES_texture_external
,EGL_ANDROID_image_native_buffer
和EGL_ANDROID_recordable
。此外,Hardware Composer 1.1 版 以上版本則需要EGL_ANDROID_framebuffer_target
。
強烈建議同時支援 EGL_ANDROID_blob_cache
EGL_KHR_fence_sync
和
EGL_ANDROID_native_fence_sync
。
Android 10 實作 EGL 1.5 介面。如要瞭解 EGL 1.5,請參閱 Khronos 版本 1.5 規格。
正在載入驅動程式
Android 預期系統何時能知道可用的 GPU
建構的映像檔以下是 32 位元和 64 位元 OpenGL ES 驅動程式的偏好路徑:
/vendor/lib/egl
和 /vendor/lib64/egl
。
載入器使用兩種系統屬性。
ro.hardware.egl
和 ro.board.platform
,也可以是
來探索並載入系統驅動程式。OpenGL ES 驅動程式必須
分別以一個二進位檔案或三個二進位檔分割。如果 OpenGL ES
驅動程式會以一個二進位檔案的形式運送,請使用下列其中一個名稱:
libGLES_${ro.hardware.egl}.so libGLES_${ro.board.platform}.so libGLES.so
如果 OpenGL ES 驅動程式運送至三個二進位檔,請使用 下列名稱集:
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 層
Android 10 導入了 GLES 的分層系統 2.0 以上版本。GLES 圖層是應用程式內部提供的共用物件,或是由 工具。GLES 層可讓可進行偵錯的應用程式使用 採用與 Vulkan:
GLES LayerLoader 是 EGL 載入器中的元件,可識別 GLES 圖層。
對於 GLES LayerLoader 找到的各圖層,GLES LayerLoader
會呼叫 AndroidGLESLayer_Initialize
,並納入 libEGL 的函式清單。
並對所有已知函式呼叫 AndroidGLESLayer_GetProcAddress
如果圖層攔截了某個函式,則會追蹤該函式的位址。
如果圖層未攔截函式
AndroidGLESLayer_GetProcAddress
會傳回相同的函式
傳回位址接著,LayerLoader 會將函式掛鉤清單更新為
指向圖層的進入點
啟用圖層
您可以只為個別應用程式啟用 GLES 圖層,也可以全域啟用。個別應用程式設定 會在每次重新啟動時保留,而全域屬性則會在重新啟動時清除。
如何啟用「個別應用程式」的圖層:
# 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
如要「按應用程式」停用圖層:
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
如何「全域」啟用圖層:
# Attempts to load layers for all applications, including native executables
adb shell setprop debug.gles.layers layer1:layer2:...:layerN
測試層
GLES 層由 Android CTS 支援,且必須通過 CTS 測試
相容裝置。如何確認圖層
工作是在裝置中執行,請執行 $ atest CtsGpuToolsHostTestCases
。