OpenGL ES ve EGL'yi uygulayın

OpenGL, 3D grafik işleme donanımı için standart bir yazılım arayüzü belirten platformlar arası bir grafik API'sidir. OpenGL ES, bir Yerleştirilmiş cihazlar için OpenGL spesifikasyonu.

Android ile uyumlu olmak için cihazların EGL, OpenGL ES 1.x ve OpenGL ES 2.0 sürücüleri sağlaması gerekir. 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 ve OpenGL ES standartlarına uygun olmasını sağlama
  • 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 sistemdeki diğer bileşenlerden (ör. medya codec'leri veya kamera) gelen diğer YUV resim biçimlerini destekler.
  • 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, EGL_KHR_fence_sync ve EGL_ANDROID_native_fence_sync'yi de desteklemeniz önemle tavsiye edilir.

Android 10'da EGL 1.5 arayüzü kullanılıyor. EGL 1.5'teki yeni özellikler hakkında bilgi edinmek için Khronos Releases 1.5 Spesifikasyonu'na bakın.

Sürücü yükleniyor

Android, sistem görüntüsü oluşturulurken sistemde kullanılabilen GPU'ların bilinmesini bekler. 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, sistem sürücülerini bulmak ve yüklemek için ro.hardware.egl ve ro.board.platform adlı iki sistem özelliğini ya da tam adı kullanır. 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 dosyada gönderiliyorsa 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, bulduğu her katman için AndroidGLESLayer_Initialize işlevini çağırır, libEGL işlev listelerini tarar ve bilinen tüm işlevler için AndroidGLESLayer_GetProcAddress işlevini çağırır. Katman bir işlevin yolunu keserse 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. Ardından LayerLoader, işlev kanca listesini katmanın giriş noktasını işaret edecek şekilde günceller.

Katmanları etkinleştirme

GLES katmanlarını uygulama başına veya genel olarak etkinleştirebilirsiniz. Uygulama başına ayarlar yeniden başlatmalarda korunur. Genel özellikler ise yeniden başlatma sırasında 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

Katmanları uygulama başına 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

Test katmanları

GLES katmanları, Android CTS tarafından desteklenmektedir ve CTS testlerini geçmek için uyumlu cihazlara bakın. Katmanların bir cihazda çalışıp çalışmadığını belirlemek için $ atest CtsGpuToolsHostTestCases komutunu çalıştırın.