OpenGL là đồ hoạ đa nền tảng API chỉ định một phần mềm tiêu chuẩn giao diện phần cứng xử lý đồ hoạ 3D. OpenGL ES là một tập hợp con của Thông số kỹ thuật OpenGL cho thiết bị được nhúng.
Để tương thích với Android, các thiết bị cần cung cấp trình điều khiển cho EGL, OpenGL ES 1.x và OpenGL ES 2.0. Hỗ trợ đối với OpenGL ES 3.x là tuỳ chọn. Các yếu tố chính cần cân nhắc bao gồm:
- Đảm bảo trình điều khiển GL mạnh mẽ và tuân thủ tiêu chuẩn OpenGL ES.
- Cho phép số lượng ngữ cảnh GL không giới hạn. Vì Android cho phép ứng dụng ở chế độ nền và cố gắng duy trì ngữ cảnh GL, thì bạn không nên giới hạn số lượng ngữ cảnh trong trình điều khiển của bạn.
- Chú ý đến dung lượng bộ nhớ được phân bổ cho từng ngữ cảnh, vì thường có từ 20 đến 30 ngữ cảnh GL hoạt động cùng một lúc.
- Hỗ trợ định dạng hình ảnh YV12 và các định dạng hình ảnh YUV khác đi kèm từ các thành phần khác trong hệ thống, chẳng hạn như bộ mã hoá và giải mã nội dung đa phương tiện hoặc máy ảnh.
- Hỗ trợ các tiện ích bắt buộc
EGL_KHR_wait_sync
,GL_OES_texture_external
,EGL_ANDROID_image_native_buffer
vàEGL_ANDROID_recordable
. Ngoài ra, Hardware Composer (Trình tổng hợp phần cứng) phiên bản 1.1 trở lên yêu cầuEGL_ANDROID_framebuffer_target
tiện ích.
Bạn cũng nên hỗ trợ EGL_ANDROID_blob_cache
,
EGL_KHR_fence_sync
và
EGL_ANDROID_native_fence_sync
.
Android 10 triển khai giao diện EGL 1.5. Để biết thông tin về các tính năng mới trong EGL 1.5, hãy xem Thông số kỹ thuật của bản phát hành 1.5 của Khronos.
Trình điều khiển đang tải
Android yêu cầu phải biết được GPU có sẵn cho hệ thống khi hệ thống
tạo hình ảnh. Đường dẫn ưu tiên cho trình điều khiển OpenGL ES 32 bit và 64 bit là
/vendor/lib/egl
và /vendor/lib64/egl
tương ứng.
Trình tải sử dụng hai thuộc tính hệ thống là
ro.hardware.egl
và ro.board.platform
, hoặc khớp chính xác
để khám phá và tải trình điều khiển hệ thống. Trình điều khiển OpenGL ES phải
được phân phối vào một tệp nhị phân hoặc chia thành ba tệp nhị phân. Nếu OpenGL ES
trình điều khiển được chuyển dưới dạng tệp nhị phân, hãy sử dụng một trong các tên sau:
libGLES_${ro.hardware.egl}.so libGLES_${ro.board.platform}.so libGLES.so
Nếu trình điều khiển OpenGL ES được đưa vào 3 tệp nhị phân, hãy sử dụng một trong các bộ tên sau:
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
Lớp OpenGL ES
Android 10 ra mắt hệ thống phân lớp cho GLES 2.0 trở lên. Lớp GLES là các đối tượng dùng chung có sẵn trong các ứng dụng hoặc được cung cấp bởi và các công cụ lập mô hình tuỳ chỉnh. Các lớp GLES cho phép các ứng dụng có thể gỡ lỗi khám phá và tải các lớp bằng cách sử dụng cơ chế thiết lập tương tự như Vulkan.
GLES LayerLoader là một thành phần trong trình tải EGL, xác định các lớp GLES.
Đối với mỗi lớp mà GLES LayerLoader tìm thấy, GLES LayerLoader
gọi AndroidGLESLayer_Initialize
, di chuyển danh sách hàm của libEGL,
và gọi AndroidGLESLayer_GetProcAddress
cho mọi hàm đã biết.
Nếu chặn một hàm, lớp sẽ theo dõi địa chỉ của hàm đó.
Nếu lớp đó không chặn một hàm,
AndroidGLESLayer_GetProcAddress
trả về cùng một hàm
địa chỉ email đã được truyền. Sau đó, LayerLoader sẽ cập nhật danh sách hook của hàm thành
trỏ tới điểm vào của lớp.
Bật lớp
Bạn có thể bật lớp GLES trên mỗi ứng dụng hoặc trên toàn cục. Cài đặt theo ứng dụng vẫn tồn tại sau khi khởi động lại, trong khi các thuộc tính chung bị xoá khi khởi động lại.
Cách bật lớp trên mỗi ứng dụng:
# 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
Cách tắt lớp trên mỗi ứng dụng:
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
Để bật lớp trên toàn cầu, hãy làm như sau:
# Attempts to load layers for all applications, including native executables
adb shell setprop debug.gles.layers layer1:layer2:...:layerN
Kiểm thử các lớp
Các lớp GLES được Android CTS hỗ trợ và bắt buộc phải vượt qua các bài kiểm thử CTS cho
thiết bị tương thích. Để xác định xem các lớp
đang làm việc trên một thiết bị, hãy chạy $ atest CtsGpuToolsHostTestCases
.