Android 圖形架構簡介
本文參考:https://source.android.com/devices/graphics/architecture
流程
一、無論開發者使用什麼渲染 API,一切內容都會渲染到Surface。(常見API:canvas,openGL)
二、Surface把影象流快取到buffer queue
三、SurfaceFlinger 從多個buffer queue中去獲取影象流執行合併操作
四、 Hardware Composer 去獲取SurfaceFlinger快取的內容實現上屏操作
一、OpenGL渲染流程
這個流程網上講解很多,此處就不多加篇幅了:
1、讀取頂點資料
2、執行頂點著色器
3、組裝圖元
4、光柵化處理
5、片段著色器(這裡涉及常見的二次線性插值,抗鋸齒等)
二、為什麼Surface要有個緩衝區
試想一下,Surface同時會發生有讀寫操作,如果沒有緩衝區,那麼就只能加鎖。
舉個例子,當SufaceFlinger去獲取Surface的影象流時,因為鎖的原因阻塞住了,那麼整個合併的操作就會阻塞住,使用者所看到的就是整個螢幕卡住了,這顯然是不合理的。
比如,此刻有兩個Surface,一個是狀態列的Surface,一個是主螢幕的Surface,當主螢幕因為邏輯原因卡住的時候,那麼不應該會影響到狀態列。
三、為什麼要有SurfaceFlinger的合併操作
一句話其實就是“不能沒有統一管理”。
影象流上屏時,對於硬體來講,它並不知道哪一部分屬於哪個View或者屬於哪個程式,它只會每一幀將整個螢幕中的所有畫素重新整理。
試想如果每個程式或者每個View都不需合併直接去操作程式,那麼很可能一個View正在上屏,而另一個View就發來了上屏請求,螢幕很可能上一個View還沒更新完,就要開始更新下一個,那麼就會出現幀撕裂的情況,如下圖:
四、上屏顯示的過程
這個過程下面的文章講的很不錯,此處直接附上文章地址:
https://blog.csdn.net/michaelcao1980/article/details/43233765
下圖摘自該文章:
相關文章
- Android 圖形架構Android架構
- 【Android系統】Android系統架構簡介Android架構
- Scrapy架構及資料流圖簡介架構
- Android初級之路-Android系統架構簡介Android架構
- ELK架構簡介架構
- 網路圖形格式簡介
- 軟體架構簡介架構
- 微服務架構簡介微服務架構
- Flume(一):簡介架構架構
- 四種JavaEE架構簡介Java架構
- 微服務架構模式簡介微服務架構模式
- Microservice架構模式簡介ROS架構模式
- 資料結構中樹形結構簡介資料結構
- BPAAS 簡單架構圖架構
- Android系統架構圖Android架構
- Redux技術架構簡介(一)Redux架構
- Java異常簡介及其架構Java架構
- Android簡潔架構設計Android架構
- android簡單的圖形特效處理Android特效
- Android的Camera架構介紹Android架構
- Slack系統架構簡介 - jinlow架構
- 資料湖架構及概念簡介架構
- TiDB簡介與整體架構TiDB架構
- WebServiceCXF與Restful架構風格簡介WebREST架構
- Kubernetes系統架構簡介架構
- 人工智慧中代理架構簡介人工智慧架構
- 圖形資料庫Neo4J簡介資料庫
- 六邊形架構架構
- UML 架構圖入門介紹 starUML架構
- 大資料分類和架構簡介大資料架構
- spring cloud架構整合-springcloud簡介SpringCloud架構GC
- 資料庫 Mysql 邏輯架構簡介資料庫MySql架構
- 一. SpringCloud簡介與微服務架構SpringGCCloud微服務架構
- 微服務架構的特徵簡要介紹微服務架構特徵
- Java平臺除錯架構簡介 (轉)Java除錯架構
- Android Architecture Blueprints(架構藍圖)Android架構
- Openstack架構概念圖-簡單彙總架構
- Nutanix:將IT基礎架構“隱形”,讓雲更簡單架構