Android系统2D/3D硬件加速分析报告

 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。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值