OpenGL, platformlar arası bir grafiktir Standart bir yazılım belirten API 3D grafik işleme donanımı arayüzü. OpenGL ES, bir Yerleştirilmiş cihazlar için OpenGL spesifikasyonu.
Cihazların Android uyumlu olması için EGL, OpenGL ES 1.x ve OpenGL ES 2.0 için sürücüleri sağlamamız gerekiyor. Destekleyin için isteğe bağlıdır. Göz önünde bulundurulması gereken önemli noktalar şunlardır:
- GL sürücüsünün sağlam olduğundan ve OpenGL ES standartlarına uygun olduğundan emin olun.
- Sınırsız sayıda GL bağlamına izin verme. Çünkü Android, arka planda çalışır ve GL bağlamlarını canlı tutmaya çalışırsa sürücünüzdeki bağlam sayısını sınırlandırın.
- Her bağlam için ayrılan bellek miktarına dikkat edin, çünkü aynı anda 20-30 etkin GL bağlamına sahip olmak yaygındır.
- YV12 resim biçimini ve kullanıma sunulan diğer YUV resim biçimlerini destekleme kamera gibi sistemdeki diğer bileşenlerin bileşenlerinden alınır.
- Zorunlu uzantıları destekleme
EGL_KHR_wait_sync
,GL_OES_texture_external
,EGL_ANDROID_image_native_buffer
veEGL_ANDROID_recordable
. Ayrıca, Donanım Oluşturucu v1.1 ve daha yüksek olanlarEGL_ANDROID_framebuffer_target
gerektirir uzantısına sahip olur.
EGL_ANDROID_blob_cache
desteklenmenizi de önemle tavsiye ederiz.
EGL_KHR_fence_sync
ve
EGL_ANDROID_native_fence_sync
.
Android 10'da EGL 1.5 arayüzü kullanılıyor. Şuradaki yeni özelliklerle ilgili bilgi için: EGL 1.5, Khronos Sürümleri 1.5 Spesifikasyonu'na bakın.
Sürücü yükleniyor
Android, sistem etkinleştirildiğinde sistemin kullanabildiği GPU'ların bilinmesini bekler
nasıl oluşturulduğunu göstereceğim. 32 bit ve 64 bit OpenGL ES sürücüleri için tercih edilen yollar:
Sırasıyla /vendor/lib/egl
ve /vendor/lib64/egl
.
Yükleyici iki sistem özelliği kullanır:
ro.hardware.egl
ve ro.board.platform
veya tam
adını tıklayın. OpenGL ES sürücüsü
ya bir ikili olarak gönderilir ya da üç ikili sürüme ayrılır. OpenGL ES
sürücüsü tek bir ikili programda gönderilirse aşağıdaki adlardan birini kullanın:
libGLES_${ro.hardware.egl}.so libGLES_${ro.board.platform}.so libGLES.so
OpenGL ES sürücüsü üç ikili programa gönderilirse şu ad grupları:
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 katmanları
Android 10, GLES için katmanlama sistemini kullanıma sunuyor 2.0 ve üzeri sürümler. GLES katmanları, uygulamaların içinden kullanılabilen veya Google tarafından sağlanan araçlar. GLES katmanları, hata ayıklaması yapılabilir uygulamaların aynı kurulum mekanizmalarını Vulkan'dan daha fazla bilgi edinebilirsiniz.
EGL yükleyicisindeki bir bileşen olan GLES layerLoader, GLES katmanlarını tanımlar.
GLES layerLoader'ın bulduğu her katman için GLES layerLoader,
AndroidGLESLayer_Initialize
çağrısını yapar, libEGL'nin fonksiyon listelerini yürütür,
ve bilinen tüm işlevler için AndroidGLESLayer_GetProcAddress
yöntemini çağırır.
Katman bir işleve müdahale ederse bu işlevin adresini izler.
Katman bir işleve müdahale etmiyorsa
AndroidGLESLayer_GetProcAddress
, aynı işlevi döndürür
geçildiğini de belirtir. Daha sonra layerLoader, işlev kancası listesini
katmanın giriş noktasına işaret eder.
Katmanları etkinleştir
GLES katmanlarını uygulama başına veya genel olarak etkinleştirebilirsiniz. Uygulamaya özgü ayarlar ve yeniden başlatma sırasında genel özellikler temizlenir.
Uygulama başına katmanları etkinleştirmek için:
# 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
Uygulama başına katmanları devre dışı bırakmak için:
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
Katmanları genel olarak etkinleştirmek için:
# Attempts to load layers for all applications, including native executables
adb shell setprop debug.gles.layers layer1:layer2:...:layerN
Katmanları test et
GLES katmanları, Android CTS tarafından desteklenmektedir ve CTS testlerini geçmek için
uyumlu cihazlara bakın. Katmanların
bir cihaz üzerinde çalışıyorsa $ atest CtsGpuToolsHostTestCases
komutunu çalıştırın.