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

时间:2023-02-06 21:46:26

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

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

Android 3D 图形架构如下

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

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

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

2D渲染

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

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

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

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


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

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