Android圖形架構分析總結
總結其實現(xiàn)方案,主要包括了以下幾個關鍵點:
1 、直接 FrameBuffer 的訪問方式,并對 FrameBuffer 采用雙緩存技術
沒有采用X-Server等方案,直接操作framebuffer,可以減少X-Server帶來的通信開銷。打開framebuffer, 創(chuàng)建兩個緩沖區(qū),(一個是on screen front buffer, 另一個back buffer, 可能位于offscreen framebuffer,也可能位于系統(tǒng)內存)。 源代碼中函數swapBuffers將back buffer內容拷貝到front buffer中。雙緩存技術使得可以在back buffer中進行繪制,隨后拷貝到front buffer中進行合成并顯示。
2 、充分利用 OpenGL 的圖形接口和硬件加速功能
通過 OpenGL 的 API , Android 能夠提供高性能的 3D 圖像。 OpenGL 的 EGL 接口,是 OpenGL ES 和底層 Native 平臺視窗系統(tǒng)之間的接口。
3 、圖像顯示的裁剪以及局部刷新機制
多個 Layer 被定義成一個層向量 LayerVector ,它包含了當前所有 Surface 對應的 layer , SurfaceFlinger 根據每個 layer 的 Z-order 把多個層組合為一個最終在屏幕上顯示的 buffer 。
Z-order : Z 序實際定義了窗口之間的層疊順序。說起“ Z 序”這個名稱,實際是相對屏幕坐標而言的。一般而言,屏幕上的所有窗口均有一個坐標系,即原點在左上角, X 軸水平向右, Y 軸垂直向下的坐標系。 Z 序就是相對于一個假想的 Z 軸而言的,這個 Z 軸從屏幕外指向屏幕內。窗口在這個 Z 軸上的值,就確定了其 Z 序。 Z 序值大的窗口,覆蓋了 Z 序值小的窗口。
在層向量里每個層都對應一個 Z 序值,同時通過給層設定優(yōu)先級的方式,使得某些層可以實現(xiàn)前端顯示,最后通過相應的裁剪算法來計算可以被顯示的區(qū)域。
優(yōu)化的重繪機制:采用局部刷新機制,并不是每次 repaint 都需要重繪整個屏幕,首先計算需要重繪的區(qū)域( mInvalidRegion ),如果 DisplayHardware::UPDATE_ON_DEMAND ,則通過設定需要重繪的區(qū)域的邊界來進行局部重繪。
4 、簡單易用的圖形原語、事件機制和控件
android.graphics, android.view 和 android.widget 功能和其他類似的圖形庫如 Qt/Gtk+ 差不多,分別提供基本的圖形原語(如畫點畫線,設置圖形上下文等),事件機制,以及開發(fā)圖形用戶界面的控件等。
5 、功能強大的 2D 圖形引擎庫
Skia 是個 2D 向量圖形處理函式庫,包含字型、坐標轉換,以及位圖都有高效能且簡潔的表現(xiàn)。它封裝底層的圖形硬件,為上面的圖形庫提供最基礎的操作圖形硬件的原語。不僅用于 Google Chrome 瀏覽器, skia 作為繪圖處理,搭配 OpenGL/ES 與特定的硬件特征,強化顯示的效果。
本站僅提供存儲服務,所有內容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權內容,請
點擊舉報。