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。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 2D/3D绘画是一种使用计算机软件或设备进行绘画的艺术形式。2D绘画是指在平面上进行绘制,例如纸、画布或计算机屏幕上的绘画,只具有高度和宽度两个维度。2D绘画通常包括素描、水彩、油画等传统艺术形式,也可以是数字绘画,使用软件如Photoshop或Illustrator来创建图像。 而3D绘画则是在三个维度上进行绘制,除了高度和宽度,还有深度。3D绘画通常在电脑上使用专业的3D建模和渲染软件进行,它可以创造出更加真实的立体效果和逼真的光影效果。3D绘画被广泛应用于电影、游戏、建筑和工业设计等领域。通过模拟三维空间和物体的形状、纹理和光影,艺术家可以呈现出更加逼真的作品。 2D/3D绘画可以通过手绘或数字工具完成。对于2D绘画,艺术家可以使用各种材料,如铅笔、墨水、油画颜料等。而3D绘画通过使用3D建模软件,艺术家可以创建虚拟的三维模型,并对其进行材质和纹理的设置,然后进行渲染以产生逼真的效果。 无论是2D还是3D绘画,都需要艺术家具备绘画技巧和创造力。2D绘画着重于构图、线条和色彩运用,而3D绘画则要求对于空间和形状有更深入的理解。无论是2D还是3D绘画,都可以通过不同的技术和风格来表达出艺术家的创造力和想象力。 总之,2D/3D绘画是一种通过使用计算机软件或设备进行绘画的艺术形式,它们分别在二维和三维空间中进行创作,广泛应用于各个领域,并需要艺术家具备绘画技巧和创造力。 ### 回答2: 2D/3D绘画是一种艺术表现形式,它结合了二维(平面)和三维(立体)元素。在二维绘画中,艺术家使用纸张或画布等平面材料,使用绘画工具如铅笔、颜料和刷子等创造出平面的艺术作品。而在三维绘画中,艺术家则可以利用计算机技术和特殊软件在虚拟空间中进行创作,制作出具有立体感的艺术作品。 2D绘画是传统的绘画形式,它主要强调平面的表现力。艺术家通过线条、颜色、光影等元素来表现物体的形状、质感和景深。它可以是现实主义的,展现真实世界的样貌;也可以是抽象的,通过简化和夸张的手法来表现情感和想象。2D绘画可以应用于绘画、插画、平面设计等领域。 而3D绘画则是现代技术的应用,它可以创建具有立体感的艺术作品。艺术家可以利用计算机图形学和特殊软件来建立虚拟世界,并在其中创建各种物体、场景和特效。3D绘画广泛应用于电影制作、游戏开发、工业设计等领域。它可以通过渲染和动画技术,使作品具有逼真和动态的效果,给观众带来沉浸式的视觉体验。 2D/3D绘画都是艺术家通过创造性的手法来表达自己的想法和情感。无论是平面的还是立体的,它们都是艺术创作的形式之一,通过色彩、形状、构图和材质来传递艺术家的独特视角和美学追求,同时也能够给观者带来视觉上的享受和思考。 ### 回答3: 2D/3D绘画是一种艺术表现形式,它涉及在平面或立体表面上使用不同材料和技术进行绘画。2D绘画指的是在平面上进行绘画,例如纸张、布料、画布等,艺术家可以使用铅笔、水彩、油画等工具和材料来表达他们想要传达的意念和感觉。2D绘画的作品通常是通过线条、颜色和阴影等元素来创作的。 而3D绘画则是在立体表面上进行绘画,例如雕塑、建筑、陶瓷等。艺术家可以使用搪塑、木材、石膏、金属等材料来创作立体作品。3D绘画要求艺术家在创作过程中考虑立体结构、透视和光影等因素,以便呈现出真实感和深度感。 2D/3D绘画都是艺术家们表达情感,展示自己创造力和想象力的重要方式。无论是平面还是立体,艺术家都可以利用不同的工具和技术来创作独特的艺术作品。2D绘画强调线条和色彩的表现力,而3D绘画则更注重形状和结构的塑造。 总而言之,2D/3D绘画都是创造艺术的方式,通过艺术家的灵感和技巧来表达他们的想法和观点。无论是在平面上还是立体上,绘画都是一种强大而丰富的艺术形式,能够触发观者的想象力和情感共鸣。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值