理解 Android 2D/3D 图形架构

时间:2014-04-30 22:11:38   收藏:0   阅读:371

首先理解Android 的 egl 的函数调用,先要得到display (对应显示器),而后选择一个支持的config(这是显卡支持的),而后创建WindowSurface, 还要创建context (context 相当于 opengl 这个状态机), 而后就可以调用 gl 的绘图函数在Surface上画图, 工作完成后需要释放 Context, windowSurace这些资源

mamicode.com,码迷 

Android 3D 图形架构如下

当用户使用 GLSurfaceView 的时候,会调用egl 的函数,创建出GLSurfaceView依赖 windowSurace,Context这些对象, 而后把java 的gl调用转化为对libGL.so的native调用,libGL.so会调用到显卡驱动

mamicode.com,码迷

如果没有硬件就是走软件模拟的的gl函数,值得注意的是Andoid对其中copybit作了优化

2D渲染

以前Android是使用skia生成2D图形的,后来(4.1 Jellybean )为了提高性能,改为使用 opengl (因为可以可以gpu),但以前的skia软架构依旧保留

当编译时打开 USE_OPENGL_RENDER:=true,才打开硬件加速(默认是打开),就是libhwui.so硬件加速的实现

跟3D一样创建Surface, 创建Context,调用gl函数绘制...

mamicode.com,码迷 


上面两个架构,渲染好了Surface(不管是GPU渲染出来的,还是cpu模拟渲染出来的),  SurfaceFlinger在最后上屏的时候,又调用了 opengl 的函数。也分为gpu硬件上屏,还是cpu模拟

mamicode.com,码迷


评论(0
© 2014 mamicode.com 版权所有 京ICP备13008772号-2  联系我们:gaon5@hotmail.com
迷上了代码!