Android 如何使用GPU硬體加速

來源:互聯網
上載者:User

 

1.名詞解釋

GPU:Graphic Processing Unit (圖形處理器)

OpenGL:Open Graphic Library 定義了一個跨程式設計語言、跨平台的編程介面的規格,不同廠商會有不同的實現方法,它主要用於三維圖象(二維的亦可)繪製。

SurfaceFlinger:Android中負責Surface之間疊加、混合操作的動態庫

Skia:Android中的2D圖形庫

libagl:Android中通過軟體方法實現的一套OpenGL動態庫

libhgl:為區別libagl,自訂的一種叫法。特指GPU廠商提供的硬體實現的OpenGL

composition:特指SurfaceFlinger對各個Surface之間的疊加、混合操作

render:特指使用OpenGL動態庫進行3D渲染

copybit:Android使用2D引擎來加速圖形操作(主要是Surface之間的composition操作)的一種技術,對應著一個或幾個動態庫。

pmem:Android特有驅動,從linux核心中reserve物理連續記憶體,可以為2d、3d引擎、vpu等裝置分配物理連續記憶體。

3D2D引擎在Android中的使用方法

2.1 Android如何使用2D3D引擎

Android在啟動後,會在運行時根據設定檔載入OpenGL(libagl & libhgl)的實現,如果有libhgl實現,預設使用libhgl實現,否則使用libagl實現。

 

Android OpenGL動態庫使用方法

1. 判斷是否含有egl.cfg檔案,如果沒有在載入libagl

2. 如果有egl.cfg檔案,則解析egl.cfg檔案,根據egl.cfg檔案載入對應libhgl和libagl

3. 分別解析libagl和libhgl,擷取libagl和libhgl中標準OpenGL函數的函數地址(函數指標)

4. 系統在執行過程中,會通過函數指標調用到libagl或者libhgl中去,從而實現圖形的繪製。

 

OpenGL在Android中兩個作用

1. 用於Surface的composition操作

         SurfaceFlinger會調用到OpenGL中,通過libagl或者libhgl做Surface的組合、疊加操作。

2. 用於圖形映像的渲染

         Android framework會對OpenGL實現進行java層次的簡單封裝,在java應用程式中對OpenGL的調用最終會調用到libagl或者libhgl中去。

         很多第三方遊戲、3D圖庫、某些launcher會使用OpenGL實現比較炫麗UI的特效。

 

Copybit在Android中的作用

Copybit在Android中主要用於Surface的composition操作。

 

 

Skia在Android中的作用

Skia是Android的2D圖形庫,用於繪製文字、幾何圖形、映像等。

Skia的裝置後端:Raster、OpenGL、PDF

 

Skia是否支援硬體加速?(此乃官方說明,我只是翻譯。)

參考http://code.google.com/p/skia/wiki/FAQ

1. Skia子類SkCanvas

         由於所有的繪圖操作都會通過SkCanvas子類,這些繪圖可以重新導向到不同的圖形API。SkGLCanvas已經可以將繪圖操作直接指向對OpenGL的調用。參考src/gl目錄

2. 自訂存在瓶頸的調用

         Skia中的某些blit操作存在瓶頸,可以利用CPU的一些特性去重寫這些操作。比如在ARMV7裝置上可以使用NEON SIMD指令進行最佳化。參考src/opts目錄

 

2.使用GPU硬體加速需要做的工作

1. Linux核心方面:

         1.1添加GPU驅動支援,以模組方式編譯GPU驅動,Android啟動時載入核心模組。

         1.2添加PMEM支援,預留記憶體供GPU使用

2. Android方面:

         2.1添加copybit HAL

我們使用copybit調用2D engine對surface composition進行硬體加速。這樣可能會達到更大的效能提升效果(比起使用3D engine)。

         2.2修改gralloc

gralloc負責顯存等的分配,以及對framebuffer操作。如果使用copybit,必須修改gralloc

         2.3修改libagl

如果使用copybit,必須修改libagl,對libagl做部分hack,使之能夠調用到copybit。

         2.4修改surfaceflinger

         如果使用 copybit可能需要做部分修改

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.