谷歌致力於推進種族平等的黑人社區。 怎麼看。
本頁面由 Cloud Translation API 翻譯而成。
Switch to English

圖像

Android的圖形HAL圖標

Android框架提供了多種圖形渲染2D和3D的API,與顯卡驅動程序的製造商實現互動,所以重要的是要擁有這些API在更高層次上如何工作的一個很好的理解。這頁介紹賴以這些驅動程序內建的圖形硬件抽象層(HAL)。

應用程序開發人員繪製圖像在屏幕上有三種方式:用帆布OpenGL ES的 ,或福爾康

Android的圖形組件

不管渲染API開發者使用什麼,一切都渲染到一個“面”。表面表示通常由SurfaceFlinger的消耗的緩衝器隊列的生產者側。即在Android平台上創建的每個窗口由一個表面支持。所有呈現的可見表面被合成到由SurfaceFlinger的顯示。

下圖顯示的關鍵組件是如何協同工作:

圖像渲染組件

圖1.如何曲面渲染

的主要部件說明如下:

圖像數據流生產者

圖像流生產者可以是任何消費產生圖形緩衝區。實例包括OpenGL ES的,畫布2D,和媒體服務器的視頻解碼器。

圖像數據流的消費者

像最常見的消費流是SurfaceFlinger的,系統服務消耗當前可見的表面和複合材料它們放到由Window Manager提供的使用顯示信息。 SurfaceFlinger的是可以修改顯示的內容的唯一服務。 SurfaceFlinger的使用OpenGL和硬件作曲家組成的一組表面。

其他的OpenGL ES應用可以消耗的圖像流,以及,如相機應用消耗相機預覽圖像流。非GL應用程序可以是消費者也是如此,例如的ImageReader類。

硬件合成

硬件抽象為顯示子系統。 SurfaceFlinger的可以委派某些組合物的工作硬件Composer從OpenGL和GPU的工作卸載。 SurfaceFlinger的作為只是一個OpenGL ES的客戶端。所以,當SurfaceFlinger的積極合成一個緩衝或兩個到第三個,例如,它使用的OpenGL ES。這使得比具有GPU進行計算的所有合成更低的功耗。

硬件合成HAL開展工作的另一半,是所有Android圖形渲染中心點。在硬件合成必須支持活動,其中之一是VSYNC(另一個是插件和playHDMI支持熱插拔)。

Gralloc

圖形內存分配器(Gralloc)需要分配由圖像生產者請求的存儲器。有關詳細信息,請參閱Gralloc HAL

數據流

見為Android圖形流水線的描述如下圖:

圖形數據流

圖2.圖形數據流經的Android

左邊的對象是生產渲染圖形緩衝區,比如主屏幕,狀態欄和系統UI。 SurfaceFlinger的是合成器和硬件合成是作曲家。

BufferQueue

BufferQueues提供了Android圖形組件之間的粘合劑。這些是一對從生產者到消費者調解緩衝器的恆定週期隊列。一旦生產者交出了他們的緩衝區,SurfaceFlinger的負責合成一切在顯示屏上。

請參閱BufferQueue通信過程以下示意圖。

BufferQueue通信過程

圖3. BufferQueue通信處理

BufferQueue包含的邏輯關係圖像流的生產者和圖像流的消費者在一起。圖像製作的一些例子是由照相機HAL或OpenGL ES遊戲所產生的相機預覽。圖像消費者的一些實例是SurfaceFlinger的或另一個應用程序,顯示一個OpenGL ES流,如相機應用顯示攝像機取景器。

BufferQueue是一種數據結構,它結合一個緩衝池與隊列,並使用粘結劑IPC進程之間傳緩衝器。生產者接口,或者傳遞給誰想要生成圖形緩衝區別人的東西,是IGraphicBufferProducer(部分表面紋理 )。 BufferQueue經常被用來渲染一個表面和利用GL消費者消費,以及其他任務。 BufferQueue可以在三種不同的模式:

同步樣模式 - BufferQueue在默認情況下工作的同步樣模式,其中每一個從生產者進來緩衝熄滅的消費者。無緩衝器在此模式下不斷丟棄。如果生產者過快,造成緩衝區比他們快被耗盡,它會阻止和等待空閒緩衝區。

非阻塞模式 - BufferQueue也可以在它產生一個錯誤,而不是等待在這些情況下的緩衝器非阻塞模式下工作。無緩衝器在這種模式下不斷丟棄要么。這是為了避免在應用軟件中潛在的死鎖可能看不懂的圖形框架的複雜的依賴關係是有用的。

丟棄模式 -最後,BufferQueue可以被配置為丟棄舊的緩衝區,而不是產生錯誤或等待。舉例來說,如果進行GL渲染到紋理視圖和圖紙盡快,緩衝區必須被丟棄。

為了進行這項工作的大部分,SurfaceFlinger的作為只是一個OpenGL ES的客戶端。所以,當SurfaceFlinger的積極合成一個緩衝或兩個到第三個,例如,它使用的OpenGL ES。

在硬件合成HAL開展工作的另一半。這HAL作為中心點為所有Android圖形渲染。