2D(Skia),3D(OpenGL ES)绘图 - android

  -- 4.1前Android是使用skia生成2D图形的,后来(4.1 Jellybean )为了提高性能,改为使用 opengl (因为可以可以gpu),但以前的skia软架构依旧保留。
  Android apk 里面的画图分为2D和3D两种:2D是由Skia 来实现的,也就是我们在框架图上看到的SGL,SGL也会调用部分opengl 的内容来实现简单的3D效果;3D部分是由OpenGL ES实现的,OpenGL ES是Opengl的嵌入式版本。
 opengl,因为它默认启用硬件渲染;android的skia不提供gpu模式。surfaceHolder.lockCanvas() ,surfaceHolder.unlockCanvasAndPost() ; 
  2D效果,View,SurfaceView-2D;3D效果;3D部分是由OpenGL|ES实现的,GLSurfaceView-3D。
> Skia canvas(2d/3d)
2D/3D绘图,Android 画图方式总结- http://blog.csdn.net/fengxinya/article/details/5908430
Android画图方式- http://blog.sina.com.cn/s/blog_6a665a240101c1gp.html
  Canvas是一个2D的概念,是在Skia中定义的;SGL,2D图形引擎库。以前Android是使用skia生成2D图形的,后来(4.1 Jellybean )为了提高性能,改为使用 opengl(因为可以可以gpu)。
   Skia分为两种:一种就是使用普通View的canvas画图,还有一种就是使用专门的SurfaceView的canvas来画图。 两种的主要是区别就是可以在SurfaceView中定义一个专门的线程来完成画图工作,应用程序不需要等待View的刷图,提高性能。前面一种适合处理 量比较小,帧率比较小的动画,比如说象棋游戏之类的;而后一种主要用在游戏,高品质动画方面的画图。2D是主要使用的图形引擎。
 -- skia这里主要涉及到的3个库:
 libcorecg.so,包含/skia/src/core的部分内容,比如其中的Region,Rect是在SurfaceFlinger里面计算可是区域的操作基本单位;
 libsgl.so,   包含/skia/src/core|effects|images|ports|utils的部分和全部内容,这个实现了skia大部分的图形效果,以及图形格式的编解码;
 libskiagl.so,包含/skia/src/gl里面的内容,主要用来调用opengl实现部分效果

-- 开源图像库Skia: Skia 是完整的2D图像库,Google 一个底层的图形、图像、动画、 SVG 、文本/RGB(8byte – 32byte)编码(jpeg, png) 和解码功能等多方面的图形库,是 android 中图形系统的引擎。
Android图片解码流程:
 1) APP:BitmapDecode.Java
 2) API:BitmapFactory.java(static image)、Movie.java(dynamic image)
 3) JNI:BitmapFactory.cpp(static image)、Movie.cpp(dynamic image)
 4) C Native Service(Skia):SkImageDecoder.cpp(static image)、SkMovie.cpp(dynamic image)
  skia 源码解析 http://www.eoeandroid.com/thread-27841-1-1.html .libskia
  使用系统自带libjpeg时问题 http://stackoverflow.com/questions/5208817/failing-to-link-against-libjpeg-so-in-jni-ndk-shared-library .libjpeg是个跨平台的开源库.

Skia主要使用的第三方库:Zlib、Jpeglib、Pnglib、giflib、fpdfemb(处理pdf文档);
Skia编译及调用 Android? Skia调用OpenGL或OpenGL ES?

> opengl(2d/3d)
  在你的Android应用中用OpenGL ES绘制图形,首先需要有一个容器,最直接的方法是实现GLSurfaceView 和  GLSurfaceView.Renderer。
  GLSurfaceView只是一种选择,比较适合于全屏绘制图形或者近似全屏绘制,其他可以选择的还有 TextureView和SurfaceView。
Android 第一个OpenGL ES程序- http://www.cnblogs.com/mengdd/archive/2013/05/02/3055649.html
Android OpenGL 学习笔记,开始篇- http://www.cnblogs.com/TerryBlog/archive/2010/07/09/1774475.html
 -- opengl的目录结构:
 /include     包含egl和gles所有的头文件 
 /java/android/opengl   这个目录包含的就是我们3D画图要使用到的GLSurfaceView
 /java/com/google/android/gles_jni   这个目录包含一些自动生成的文件
 /java/javax/microedition/khronos/egl   这就是应用层使用到的egl接口
 /java/javax/microedition/khronos/opengl  这就是应用层使用到的opengl接口
 /libagl  这个就是opengl主要的实现了
 /libs  这里面包含两个库的实现,一个是libegl.so 还有一个是libGL|ES_CM.so
 /tools  在我的理解这就是一个jni的生成工具

你可能感兴趣的:(2D(Skia),3D(OpenGL ES)绘图 - android)