架構--Android 圖形架構

來源:https://source.android.com/devices/graphics/architecture?hl=zh-cn

圖形架構

每位開發(fā)者都應了解有關 Surface蹲盘、SurfaceHolder、EGLSurface铃诬、SurfaceView、GLSurfaceView氧急、SurfaceTexture、TextureView吩坝、SurfaceFlinger 和 Vulkan 方面的知識。

本頁將介紹 Android 系統(tǒng)級圖形架構的基本要素钉寝,并介紹應用框架和多媒體系統(tǒng)如何使用這些要素闸迷。我們會重點介紹圖形數據的緩沖區(qū)是如何在系統(tǒng)中移動的。如果您想了解 SurfaceView 和 TextureView 為何采用現有的運行方式腥沽,或者想要了解 Surface 與 EGLSurface 的交互方式,本文會為您逐一解答今阳。

假設您對 Android 設備和應用開發(fā)已有一定了解。您不需要掌握有關應用框架的詳細知識墓臭,本文也很少提及 API 調用,但本材料與其他公開文檔互不重疊窿锉。本文旨在詳細介紹渲染幀以進行輸出涉及的重要事件,從而幫助您在設計應用時做出明智的選擇嗡载。為此,我們自下而上地介紹了 UI 類的工作原理洼滚,而不是它們的使用方法。

本部分包括多個頁面判沟,從背景材料到 HAL 細節(jié)再到用例,進行了全面介紹挪哄。首先是對 Android 圖形緩沖區(qū)進行了解釋,并說明了合成和顯示機制砸彬,然后繼續(xù)介紹為合成器提供數據的更高級別的機制。我們建議您按照下列順序閱讀相關頁面砂碉,而不要直接跳到感興趣的主題。

低級別組件

BufferQueue 和 gralloc增蹭。BufferQueue 將可生成圖形數據緩沖區(qū)的組件(生產者)連接到接受數據以便進行顯示或進一步處理的組件(消費者)磅摹。通過供應商專用 HAL 接口實現的 gralloc 內存分配器將用于執(zhí)行緩沖區(qū)分配任務。

SurfaceFlinger户誓、Hardware Composer 和虛擬顯示屏。SurfaceFlinger 接受來自多個源的數據緩沖區(qū)帝美,然后將它們進行合成并發(fā)送到顯示屏。Hardware Composer HAL (HWC) 確定使用可用硬件合成緩沖區(qū)的最有效的方法悼潭,虛擬顯示屏使合成輸出可在系統(tǒng)內使用(錄制屏幕或通過網絡發(fā)送屏幕)。

Surface女责、Canvas 和 SurfaceHolder。Surface 可生成一個通常由 SurfaceFlinger 使用的緩沖區(qū)隊列抵知。當渲染到 Surface 上時刷喜,結果最終將出現在傳送給消費者的緩沖區(qū)中。Canvas API 提供一種軟件實現方法(支持硬件加速)掖疮,用于直接在 Surface 上繪圖(OpenGL ES 的低級別替代方案)。與視圖有關的任何內容均涉及到 SurfaceHolder浊闪,其 API 可用于獲取和設置 Surface 參數(如大小和格式)。

EGLSurface 和 OpenGL ES搁宾。OpenGL ES (GLES) 定義了用于與 EGL 結合使用的圖形渲染 API。EGI 是一個規(guī)定如何通過操作系統(tǒng)創(chuàng)建和訪問窗口的庫(要繪制紋理多邊形爽待,請使用 GLES 調用;要將渲染放到屏幕上鸟款,請使用 EGL 調用)。此頁還介紹了 ANativeWindow何什,它是 Java Surface 類的 C/C++ 等價類,用于通過原生代碼創(chuàng)建 EGL 窗口表面处渣。

Vulkan。Vulkan 是一種用于高性能 3D 圖形的低開銷霍比、跨平臺 API。與 OpenGL ES 一樣悠瞬,Vulkan 提供用于在應用中創(chuàng)建高質量實時圖形的工具。Vulkan 的優(yōu)勢包括降低 CPU 開銷以及支持SPIR-V 二進制中間語言浅妆。

高級別組件

SurfaceView 和 GLSurfaceView障癌。SurfaceView 結合了 Surface 和 View。SurfaceView 的 View 組件由 SurfaceFlinger(而不是應用)合成涛浙,從而可以通過單獨的線程/進程渲染摄欲,并與應用界面渲染隔離。GLSurfaceView 提供幫助程序類來管理 EGL 上下文胸墙、線程間通信以及與“Activity 生命周期”的交互(但使用 GLES 時并不需要 GLSurfaceView)按咒。

SurfaceTexture。SurfaceTexture 將 Surface 和 GLES 紋理相結合來創(chuàng)建 BufferQueue励七,而您的應用是 BufferQueue 的消費者。當生產者將新的緩沖區(qū)排入隊列時掠抬,它會通知您的應用。您的應用會依次釋放先前占有的緩沖區(qū)剿另,從隊列中獲取新緩沖區(qū)并執(zhí)行 EGL 調用,從而使 GLES 可將此緩沖區(qū)作為外部紋理使用雨女。Android 7.0 增加了對安全紋理視頻播放的支持,以便用戶能夠對受保護的視頻內容進行 GPU 后處理氛堕。

TextureView。TextureView 結合了 View 和 SurfaceTexture括儒。TextureView 對 SurfaceTexture 進行包裝,并負責響應回調以及獲取新的緩沖區(qū)帮寻。在繪圖時,TextureView 使用最近收到的緩沖區(qū)的內容作為其數據源固逗,根據 View 狀態(tài)指示藕帜,在它應該渲染的任何位置和以它應該采用的任何渲染方式進行渲染。View 合成始終通過 GLES 來執(zhí)行洽故,這意味著內容更新可能會導致其他 View 元素重繪。

Except as otherwise noted, the content of this page is licensed under theCreative Commons Attribution 3.0 License, and code samples are licensed under theApache 2.0 License. For details, see ourSite Policies. Java is a registered trademark of Oracle and/or its affiliates.

Last updated 八月 24, 2017.

Build

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
  • 序言:七十年代末隘弊,一起剝皮案震驚了整個濱河市哈踱,隨后出現的幾起案子嚣鄙,更是在濱河造成了極大的恐慌吻贿,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,042評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件肌割,死亡現場離奇詭異,居然都是意外死亡把敞,警方通過查閱死者的電腦和手機,發(fā)現死者居然都...
    沈念sama閱讀 89,996評論 2 384
  • 文/潘曉璐 我一進店門奋早,熙熙樓的掌柜王于貴愁眉苦臉地迎上來赠橙,“玉大人,你說我怎么就攤上這事期揪。” “怎么了凤薛?”我有些...
    開封第一講書人閱讀 156,674評論 0 345
  • 文/不壞的土叔 我叫張陵,是天一觀的道長缤苫。 經常有香客問我速兔,道長,這世上最難降的妖魔是什么活玲? 我笑而不...
    開封第一講書人閱讀 56,340評論 1 283
  • 正文 為了忘掉前任涣狗,我火速辦了婚禮,結果婚禮上翼虫,老公的妹妹穿的比我還像新娘屑柔。我一直安慰自己,他們只是感情好珍剑,可當我...
    茶點故事閱讀 65,404評論 5 384
  • 文/花漫 我一把揭開白布掸宛。 她就那樣靜靜地躺著,像睡著了一般招拙。 火紅的嫁衣襯著肌膚如雪唧瘾。 梳的紋絲不亂的頭發(fā)上措译,一...
    開封第一講書人閱讀 49,749評論 1 289
  • 那天,我揣著相機與錄音饰序,去河邊找鬼。 笑死求豫,一個胖子當著我的面吹牛,可吹牛的內容都是我干的蝠嘉。 我是一名探鬼主播,決...
    沈念sama閱讀 38,902評論 3 405
  • 文/蒼蘭香墨 我猛地睜開眼蚤告,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了杜恰?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 37,662評論 0 266
  • 序言:老撾萬榮一對情侶失蹤舔涎,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后终抽,有當地人在樹林里發(fā)現了一具尸體,經...
    沈念sama閱讀 44,110評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡昼伴,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 36,451評論 2 325
  • 正文 我和宋清朗相戀三年镣屹,在試婚紗的時候發(fā)現自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片女蜈。...
    茶點故事閱讀 38,577評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖逸寓,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情竹伸,我是刑警寧澤,帶...
    沈念sama閱讀 34,258評論 4 328
  • 正文 年R本政府宣布勋篓,位于F島的核電站吧享,受9級特大地震影響譬嚣,放射性物質發(fā)生泄漏。R本人自食惡果不足惜拜银,卻給世界環(huán)境...
    茶點故事閱讀 39,848評論 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望钱豁。 院中可真熱鬧,春花似錦、人聲如沸卵酪。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,726評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至瘸羡,卻和暖如春漩仙,著一層夾襖步出監(jiān)牢的瞬間队他,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,952評論 1 264
  • 我被黑心中介騙來泰國打工麸折, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人垢啼。 一個月前我還...
    沈念sama閱讀 46,271評論 2 360
  • 正文 我出身青樓芭析,卻偏偏與公主長得像,于是被迫代替她去往敵國和親馁启。 傳聞我的和親對象是個殘疾皇子尸饺,可洞房花燭夜當晚...
    茶點故事閱讀 43,452評論 2 348

推薦閱讀更多精彩內容