OpenGL adalah grafis lintas platform API yang menentukan software standar untuk perangkat keras pemrosesan grafis 3D. OpenGL ES adalah subset dari Spesifikasi OpenGL untuk perangkat tersemat.
Agar kompatibel dengan Android, perangkat Anda harus menyediakan {i>driver<i} untuk EGL, OpenGL ES 1.x, dan OpenGL ES 2.0. Dukungan untuk OpenGL ES 3.x bersifat opsional. Pertimbangan penting meliputi:
- Memastikan driver GL sudah andal dan sesuai dengan standar OpenGL ES.
- Mengizinkan konteks GL dalam jumlah yang tidak terbatas. Karena Android memungkinkan aplikasi di latar belakang dan mencoba menjaga konteks GL tetap hidup, Anda tidak boleh membatasi jumlah konteks pada driver.
- Perhatikan jumlah memori yang dialokasikan untuk setiap konteks, karena umumnya ada 20-30 konteks GL aktif sekaligus.
- Mendukung format gambar YV12 dan format gambar YUV lainnya yang disertakan dari komponen lain dalam sistem, seperti codec media atau kamera.
- Mendukung ekstensi wajib
EGL_KHR_wait_sync
,GL_OES_texture_external
,EGL_ANDROID_image_native_buffer
, danEGL_ANDROID_recordable
. Selain itu, Hardware Composer v1.1 dan yang lebih tinggi memerlukanEGL_ANDROID_framebuffer_target
.
Sangat direkomendasikan untuk juga mendukung EGL_ANDROID_blob_cache
,
EGL_KHR_fence_sync
dan
EGL_ANDROID_native_fence_sync
.
Android 10 menerapkan antarmuka EGL 1.5. Untuk informasi tentang fitur baru di EGL 1.5, lihat Spesifikasi Rilis Khronos 1.5.
Driver sedang dimuat
Android mengharapkan GPU yang tersedia untuk sistem diketahui saat sistem
akan dibangun. Jalur yang lebih disukai untuk driver OpenGL ES 32-bit dan 64-bit adalah
/vendor/lib/egl
dan /vendor/lib64/egl
masing-masing.
Loader menggunakan dua properti sistem,
ro.hardware.egl
dan ro.board.platform
, atau persisnya
untuk menemukan dan
memuat {i>driver<i} sistem. Driver OpenGL ES harus
dikirim dalam satu biner
atau dibagi menjadi tiga biner. Jika OpenGL ES
{i>driver<i} dikirimkan dalam satu biner, gunakan salah satu nama berikut:
libGLES_${ro.hardware.egl}.so libGLES_${ro.board.platform}.so libGLES.so
Jika driver OpenGL ES dikirimkan ke dalam tiga biner, gunakan salah satu kumpulan nama berikut:
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
Lapisan OpenGL ES
Android 10 memperkenalkan sistem pelapisan untuk GLES 2.0 dan yang lebih baru. Lapisan GLES adalah objek bersama yang tersedia dari dalam aplikasi atau disediakan oleh alat. Lapisan GLES memungkinkan aplikasi yang dapat di-debug menemukan dan memuat lapisan menggunakan mekanisme penyiapan yang sama dengan Vulkan.
LayerLoader GLES, yakni komponen dalam loader EGL, mengidentifikasi lapisan GLES.
Untuk setiap lapisan yang ditemukan LayerLoader GLES, LayerLoader GLES
memanggil AndroidGLESLayer_Initialize
, menelusuri daftar fungsi libEGL,
dan memanggil AndroidGLESLayer_GetProcAddress
untuk semua fungsi yang diketahui.
Jika mengintersepsi fungsi, lapisan akan melacak alamat fungsi tersebut.
Jika lapisan tidak mengintersepsi fungsi,
AndroidGLESLayer_GetProcAddress
menampilkan fungsi yang sama
alamat yang diberikan. LayerLoader kemudian memperbarui daftar hook fungsi menjadi
ke titik entri lapisan.
Mengaktifkan lapisan
Anda dapat mengaktifkan lapisan GLES per aplikasi maupun secara global. Setelan per aplikasi tetap ada meskipun perangkat {i>reboot<i}, sementara properti global akan dihapus saat {i>reboot<i}.
Untuk mengaktifkan lapisan per aplikasi:
# 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
Untuk menonaktifkan lapisan per aplikasi:
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
Untuk mengaktifkan lapisan secara global:
# Attempts to load layers for all applications, including native executables
adb shell setprop debug.gles.layers layer1:layer2:...:layerN
Lapisan pengujian
Lapisan GLES didukung oleh Android CTS dan harus lulus uji CTS untuk
perangkat yang kompatibel. Untuk mengidentifikasi apakah lapisan
sedang berfungsi di perangkat, jalankan $ atest CtsGpuToolsHostTestCases
.