Grafik

Android Grafik HAL simgesi

Android çerçevesi, 2D ve 3D için üreticinin grafik sürücüleri uygulamalarıyla etkileşime giren çeşitli grafik işleme API'leri sunar; dolayısıyla bu API'lerin daha yüksek düzeyde nasıl çalıştığını iyi anlamak önemlidir. Bu sayfada, bu sürücülerin üzerinde oluşturulduğu grafik donanımı soyutlama katmanı (HAL) tanıtılmaktadır. Bu bölüme devam etmeden önce aşağıdaki terimlere aşina olun:

canvas (genel terim), Canvas (API öğesi)
Kanvas, gerçek bitlerin bir bitmap veya bir Surface nesnesine göre birleştirilmesiyle ilgilenen bir çizim yüzeyidir. Canvas bitmap'lerin, çizgilerin, dairelerin, dikdörtgenlerin, metinlerin vb. standart bilgisayar çizimi için yöntemlere sahiptir ve bir bitmap'e veya yüzeye bağlanır. Kanvas, ekranda 2 boyutlu nesneler çizmenin en basit ve en kolay yoludur. Temel sınıf Canvas .
çekilebilir
Çizilebilir, arka plan, başlık veya ekranın başka bir kısmı olarak kullanılabilecek derlenmiş bir görsel kaynaktır. Bir çizilebilir öğe genellikle başka bir UI öğesine, örneğin bir arka plan görüntüsü olarak yüklenir. Bir çizilebilir, olayları alamaz ancak animasyon nesneleri veya görüntü kitaplıkları gibi alt sınıfları etkinleştirmek için durum ve zamanlama gibi çeşitli diğer özellikleri atar. Birçok çizilebilir nesne, çizilebilir kaynak dosyalarından (görüntüyü tanımlayan XML veya bitmap dosyaları) yüklenir. Çizilebilir kaynaklar, android.graphics.drawable alt sınıfları halinde derlenir. Çizilebilir öğeler ve diğer kaynaklar hakkında daha fazla bilgi için bkz.
düzen kaynağı
Düzen kaynağı, etkinlik ekranının düzenini açıklayan bir XML dosyasıdır. Daha fazla bilgi için bkz . Düzen kaynağı .
dokuz yama (9 yama, NinePatch)
Dokuz yama, cihazdaki arka planlar veya diğer görüntüler için kullanılabilen, yeniden boyutlandırılabilir bir bitmap kaynağıdır. Daha fazla bilgi için bkz . Dokuz yama .
OpenGL ES
OpenGL ES, 2D ve 3D grafikleri işlemek için platformlar arası bir API'dir. Android, donanım hızlandırmalı 3D görüntüleme için OpenGL ES kitaplıkları sağlar. 2D görüntüleme için tuval daha basit bir seçenektir. OpenGL ES, Android Yerel Geliştirme Kitinde (NDK) mevcuttur. android.opengl ve javax.microedition.khronos.opengles paketleri OpenGL ES işlevselliğini ortaya çıkarır.
yüzey (genel terim), Surface (API öğesi)
Bir yüzey, ekrana birleştirilen bir bellek bloğunu temsil eder. Yüzey, çizim için bir tuval içerir ve katmanları çizmek ve Surface nesnesini yeniden boyutlandırmak için çeşitli yardımcı yöntemler sağlar. Doğrudan Surface sınıfı yerine SurfaceView sınıfını kullanın.
yüzey görünümü (genel terim), SurfaceView (API öğesi)
Yüzey görünümü, bir Surface nesnesini çizim için saran ve boyutunu ve formatını dinamik olarak belirlemeye yönelik yöntemleri ortaya çıkaran bir View nesnesidir. Yüzey görünümü, oyunlar veya kamera önizlemeleri gibi yoğun kaynak gerektiren işlemler için kullanıcı arayüzü iş parçacığından bağımsız olarak çizim yapmanın bir yolunu sağlar, ancak sonuç olarak ekstra bellek kullanır. Yüzey görünümü hem tuvali hem de OpenGL ES grafiklerini destekler. SurfaceView nesnesinin temel sınıfı SurfaceView .
tema
Tema, çeşitli varsayılan görüntüleme ayarlarını tanımlamak için bir araya getirilen, metin boyutu ve arka plan rengi gibi bir dizi özelliktir. Android, R.style listelenen ve Theme_ ile başlayan birkaç standart tema sağlar.
görünüm (genel terim), View (API öğesi)
Görünüm, ekranda dikdörtgen bir alan çizer ve tıklama, tuş vuruşu ve diğer etkileşim olaylarını yönetir. View sınıfı, bir etkinlik veya iletişim ekranının metin kutuları ve pencereler gibi çoğu düzen bileşeni için temel sınıftır. Bir View nesnesi, kendisini çizmek için ana nesnesinden (bkz. ViewGroup ) çağrılar alır ve üst nesnesine, üst nesne tarafından dikkate alınmayabilecek, tercih edilen boyutu ve konumu hakkında bilgi verir. Daha fazla bilgi için bkz. View .
görünüm grubu (genel terim), ViewGroup (API öğesi)
Bir görünüm grubu, bir dizi alt görünümü gruplandırır. Görünüm grubu, çocuk görünümlerinin nereye yerleştirileceğine ve ne kadar büyük olabileceğine karar vermekten ve uygun olduğunda her birini kendilerini çizmeye çağırmaktan sorumludur. Bazı görünüm grupları görünmezdir ve yalnızca düzen içindir, diğerleri ise kayan liste kutusu gibi kendine özgü bir kullanıcı arayüzüne sahiptir. Görünüm grupları widget paketindedir ancak ViewGroup sınıfını genişletir.
hiyerarşiyi görüntüle
Görünüm hiyerarşisi, bir uygulamanın her bileşeni için kullanıcı arayüzünü tanımlayan görünüm ve görünüm grubu nesnelerinin bir düzenlemesidir. Hiyerarşi, bir veya daha fazla alt görünüm veya görünüm grubu içeren görünüm gruplarından oluşur. Android SDK ile birlikte sağlanan Hiyerarşi Görüntüleyiciyi kullanarak hata ayıklama ve optimizasyon için görünüm hiyerarşisinin görsel bir temsilini elde edebilirsiniz.
Vulkan
Vulkan , yüksek performanslı 3D grafiklere yönelik düşük maliyetli, çapraz platformlu bir API'dir.
Araç
Widget, form öğelerini ve metin kutusu veya açılır menü gibi diğer kullanıcı arayüzü bileşenlerini işleyen, tam olarak uygulanmış görünüm alt sınıfları kümesinden biridir. Widget tam olarak uygulandığından ölçüm, çizim ve ekran olaylarına yanıt verme işlemlerini gerçekleştirir. Widget'lar android.widget paketindedir.
pencere (genel terim), Window (API öğesi)
Bir Android uygulamasında pencere, görünüm ve his, başlık çubuğu metni ve menülerin konumu ve içeriği gibi genel bir pencerenin öğelerini belirten, Window soyut sınıfından türetilmiş bir nesnedir. İletişim kutuları ve etkinlikler, bir Window nesnesini işlemek için Window sınıfının bir uygulamasını kullanır. Uygulamanızda Window sınıfını uygulamanıza veya pencereleri kullanmanıza gerek yoktur.

Uygulama geliştiricileri görüntüleri ekrana üç şekilde çizer: Canvas , OpenGL ES veya Vulkan ile.

Android grafik bileşenleri

Oluşturma API geliştiricilerinin kullandığı şey ne olursa olsun, her şey bir yüzey üzerinde oluşturulur. Yüzey, genellikle SurfaceFlinger tarafından tüketilen bir arabellek kuyruğunun üretici tarafını temsil eder. Android platformunda oluşturulan her pencere bir yüzey tarafından desteklenmektedir. Oluşturulan tüm görünür yüzeyler SurfaceFlinger tarafından ekranda birleştirilir.

Aşağıdaki şemada temel bileşenlerin birlikte nasıl çalıştığı gösterilmektedir:

görüntü işleme bileşenleri

Şekil 1. Yüzeylerin nasıl oluşturulduğu.

Ana bileşenler aşağıda açıklanmıştır:

Görüntü akışı üreticileri

Bir görüntü akışı üreticisi, tüketim için grafik arabellekleri üreten herhangi bir şey olabilir. Örnekler arasında OpenGL ES, Canvas 2D ve mediaserver video kod çözücüleri yer alır.

Görüntü akışı tüketicileri

Görüntü akışlarının en yaygın tüketicisi, mevcut görünür yüzeyleri tüketen ve bunları Pencere Yöneticisi tarafından sağlanan bilgileri kullanarak ekranda birleştiren sistem hizmeti olan SurfaceFlinger'dır. SurfaceFlinger, ekranın içeriğini değiştirebilen tek hizmettir. SurfaceFlinger, bir yüzey grubu oluşturmak için OpenGL ve Hardware Composer'ı kullanır.

Kamera ön izleme görüntü akışını tüketen kamera uygulaması gibi diğer OpenGL ES uygulamaları da görüntü akışlarını tüketebilir. ImageReader sınıfı gibi GL olmayan uygulamalar da tüketici olabilir.

Donanım Oluşturucu

Görüntü alt sistemi için donanım soyutlaması. SurfaceFlinger, işi OpenGL ve GPU'dan boşaltmak için belirli kompozisyon çalışmalarını Donanım Oluşturucuya devredebilir. SurfaceFlinger, başka bir OpenGL ES istemcisi gibi davranır. Dolayısıyla, SurfaceFlinger aktif olarak bir veya iki arabelleği üçüncüde birleştirirken, OpenGL ES kullanıyor. Bu, birleştirme işlemini GPU'nun tüm hesaplamayı yürütmesinden daha düşük güç haline getirir.

Donanım Oluşturucu HAL, işin diğer yarısını yürütür ve tüm Android grafik oluşturma işlemlerinin merkezi noktasıdır. Donanım Oluşturucusu, biri VSYNC olan (diğeri tak ve çalıştır HDMI desteği için çalışırken takılabilen) olayları desteklemelidir.

Gralloc

Görüntü üreticilerinin talep ettiği belleği tahsis etmek için grafik bellek ayırıcısına (Gralloc) ihtiyaç vardır. Ayrıntılar için bkz. Gralloc HAL .

Veri akışı

Android grafik işlem hattının bir tasviri için aşağıdaki şemaya bakın:

grafik veri akışı

Şekil 2. Android üzerinden grafik veri akışı

Soldaki nesneler, ana ekran, durum çubuğu ve sistem kullanıcı arayüzü gibi grafik arabellekleri üreten oluşturuculardır. SurfaceFlinger bestecidir ve Hardware Composer bestecidir.

Tampon Kuyruğu

BufferQueues, Android grafik bileşenleri arasında birleştirici görevi görür. Bunlar, üreticiden tüketiciye kadar sürekli tampon döngüsüne aracılık eden bir çift kuyruktur. Üreticiler arabelleklerini teslim ettikten sonra SurfaceFlinger her şeyin ekranda birleştirilmesinden sorumludur.

BufferQueue iletişim süreci için aşağıdaki şemaya bakın.

BufferQueue iletişim süreci

Şekil 3. BufferQueue iletişim süreci

BufferQueue, görüntü akışı üreticilerini ve görüntü akışı tüketicilerini birbirine bağlayan mantığı içerir. Görüntü üreticilerinin bazı örnekleri, kamera HAL veya OpenGL ES oyunları tarafından üretilen kamera önizlemeleridir. Görüntü tüketicilerine örnek olarak SurfaceFlinger veya kamera vizörünü görüntüleyen kamera uygulaması gibi OpenGL ES akışını görüntüleyen başka bir uygulama verilebilir.

BufferQueue, arabellek havuzunu bir kuyrukla birleştiren ve işlemler arasında arabellekleri geçirmek için Binder IPC'yi kullanan bir veri yapısıdır. Üretici arayüzü veya grafik arabellekleri oluşturmak isteyen birine ilettiğiniz şey IGraphicBufferProducer'dır ( SurfaceTexture'ın bir parçası). BufferQueue, diğer görevlerin yanı sıra genellikle bir Yüzeye işlemek ve bir GL Tüketici ile tüketmek için kullanılır.

BufferQueue üç farklı modda çalışabilir:

Eşzamanlı benzeri mod - BufferQueue, varsayılan olarak, üreticiden gelen her arabelleğin tüketiciye çıktığı eşzamanlı benzeri bir modda çalışır. Bu modda hiçbir zaman arabellek atılmaz. Üretici çok hızlıysa ve boşaltıldığından daha hızlı arabellekler oluşturursa, engelleyecek ve boş arabellekleri bekleyecektir.

Engellemesiz mod - BufferQueue, bu durumlarda arabellek beklemek yerine hata ürettiği engellemesiz modda da çalışabilir. Bu modda da hiçbir zaman arabellek atılmaz. Bu, grafik çerçevesinin karmaşık bağımlılıklarını anlayamayabilecek uygulama yazılımındaki olası kilitlenmeleri önlemek için kullanışlıdır.

Atma modu - Son olarak BufferQueue, hata oluşturmak veya beklemek yerine eski arabellekleri atacak şekilde yapılandırılabilir. Örneğin, GL oluşturmayı bir doku görünümüne ve çizime mümkün olduğu kadar hızlı bir şekilde gerçekleştiriyorsanız, ara belleklerin bırakılması gerekir.

Bu işin çoğunu yürütmek için SurfaceFlinger, başka bir OpenGL ES istemcisi gibi davranır. Dolayısıyla SurfaceFlinger aktif olarak bir veya iki arabelleği üçüncüde birleştirirken, OpenGL ES kullanıyor.

Donanım Bestecisi HAL işin diğer yarısını yürütür. Bu HAL, tüm Android grafik oluşturma işlemlerinin merkezi noktası görevi görür.