标签:android
首先理解Android 的 egl 的函数调用,先要得到display (对应显示器),而后选择一个支持的config(这是显卡支持的),而后创建WindowSurface, 还要创建context (context 相当于 opengl 这个状态机), 而后就可以调用 gl 的绘图函数在Surface上画图, 工作完成后需要释放 Context, windowSurace这些资源
Android 3D 图形架构如下
当用户使用 GLSurfaceView 的时候,会调用egl 的函数,创建出GLSurfaceView依赖 windowSurace,Context这些对象, 而后把java 的gl调用转化为对libGL.so的native调用,libGL.so会调用到显卡驱动
如果没有硬件就是走软件模拟的的gl函数,值得注意的是Andoid对其中copybit作了优化
2D渲染
以前Android是使用skia生成2D图形的,后来(4.1 Jellybean )为了提高性能,改为使用 opengl (因为可以可以gpu),但以前的skia软架构依旧保留
当编译时打开 USE_OPENGL_RENDER:=true,才打开硬件加速(默认是打开),就是libhwui.so硬件加速的实现
跟3D一样创建Surface, 创建Context,调用gl函数绘制...
上面两个架构,渲染好了Surface(不管是GPU渲染出来的,还是cpu模拟渲染出来的), SurfaceFlinger在最后上屏的时候,又调用了 opengl 的函数。也分为gpu硬件上屏,还是cpu模拟
标签:android
原文地址:http://blog.csdn.net/span76/article/details/24719233