OpenGL ES ve EGL'yi uygulayın

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 ve EGL_ANDROID_recordable. Ayrıca, Donanım Oluşturucu v1.1 ve daha yüksek olanlar EGL_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 layers
adb shell settings put global enable_gpu_debug_layers 1

# Specify target app
adb 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 layers
adb 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.