Android系統2D/3D硬體加速分析報告

來源:互聯網
上載者:User
1
.前言:

如果處理器只有
2D
硬體加速而沒有
3D
硬體加速,則可以利用
opengl
中的
libagl
,實現封裝在
libagl
裡的
copybit
,因為相對
3D API
來說,這個模組的封裝
google
基本是做好的,只要去實現一個
copybit HAL
即可;如果處理器
2D/3D
硬體加速均有,那麼可以丟開
copybit
,去實現
openGL
ES 2D/3D API
的加速功能。

2

Android
系統硬體加速流程:

frameworks/base/opengl/libs/EGL/egl.cpp
檔案中通過
egl_init_drivers() ->

egl_init_drivers_locked()
調用定義在
frameworks/base/opengl/libs/EGL/Loader.c
檔案中的
loader::open
函數開啟軟體和硬體
EGL
加速驅動。
frameworks/base/opengl/libs/EGL/Loader.c

檔案中,通過
Loader::Loader()
函數開啟硬體加速設定檔
/system/lib/egl/egl.cfg
,並賦給
dpy

impl

tag
三個變數,如果硬體加速設定檔
/system/lib/egl/egl.cfg
不存在,則
dpy=0

impl=0

tag=android
,因此
Loader::open()
函數中通過擷取該
dpy

impl

tag
來決定載入預設的軟體加速動態庫
/system/lib/egl/libGLES_android.so
中的
EGL

GLESv1_CM

GLESv2
三個部分的函數,如果載入成功則
new
一個
driver_t
架構,並用載入的函數進行初始化。本文研究的系統中存在
/system/lib/egl/egl.cfg
檔案,其格式為
0 1 sxwboy
,因此
dpy=0

impl=1

tag=sxwboy

Loader::open()
函數中通過擷取該
dpy

impl

tag
來決定是否載入硬體加速動態庫
/system/lib/egl/libGLES_sxwboy.so
中的
EGL

GLESv1_CM

GLESv2
三個部分的函數,如果載入成功則
new
一個
driver_t
架構,並用載入的函數進行初始化;如果載入失敗則分別載入
/system/lib/egl/libEGL_sxwboy.so

/system/lib/egl/libGLESv1_CM_sxwboy.so

/system/lib/egl/libGLESv2_sxwboy.so
三個動態庫中相應的函數。

註:
libGLES_android.so
為編譯
frameworks/base/opengl/libagl/
目錄而產生的,其專門有一個
copybit.cpp
檔案對
copybit
模組進一步封裝。
libagl
中通過在
frameworks/base/opengl/libagl/Android.mk
檔案中定義
LIBAGL_USE_GRALLOC_COPYBITS := 1
來載入
copybit
模組;如果未定義
LIBAGL_USE_GRALLOC_COPYBITS
,則通過軟體的方式而不使用
copybit
模組來達到
2D
硬體加速。

3
.僅
2D
硬體加速:

frameworks/base/opengl/libagl/egl.cpp
檔案中利用在
hardware/libhardware/hardware.c
檔案中定義的
hw_get_module()
函數,該函數判斷獲得的系統屬性是否在
variant_keys[]
數組中定義,通過
load()
函數載入相應的硬體模組,否則載入
default
硬體模組。因此需要研究
libagl
,根據需要實現相應的
copybit
硬體模組。

      

註:並不是所有代碼都使用了封裝好的
copybit
,也並不是僅有
opengl
能夠使用
copybit
模組。如:
libagl/egl.cpp
檔案中有個
copyBIt
函數直接用了
copybit

blit

frameworks/base/libs/surfaceflinger/Layerbuffer.cpp
檔案中
LayerBuffer::BufferSource::onDraw()
函數直接用了
copybit

set_parameter

LayerBuffer::onFirstRef()
函數也直接開啟了
copybit
模組。

4

2D/3D
硬體加速均需要:

      

需研究
opengl
es
,並實現
/system/lib/egl/libGLES_sxwboy.so或者
/system/lib/egl/libEGL_sxwboy.so

/system/lib/egl/libGLESv1_CM_sxwboy.so

/system/lib/egl/libGLESv2_sxwboy.so
動態庫來提供
openGL ES 2D/3D
硬體加速
API

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.