android 中的 openGL引擎的移植

http://blog.csdn.net/andyhuabing/article/details/7345486

《android系统级深入开发---移植和调试》读书笔记

一、android opengl的基本层次结构



二、Dount(甜饼)及之前的android中的OpenGL结构。

1、OpenGL的实现库

OpenGL的实现库由android自带软件库libagl(基于软件算法)实现,或者由各个不同平台的硬件libhgl实现,libhgl一般需要调用OpenGL的驱动程序实现。其中libagl的路径为:framework\base\opengl\libs\libagl:生成libagl.so,OpenGL的软件实现库。

不过目前本机上安装的android中没有这个路径。
2、OpenGL的本地框架库

头文件路径:

frameworks\base\opengl\include\EGL

frameworks\base\opengl\include\GLES

本地库的lib路径

frameworks\base\opengl\libs\GLES_CM    ---opengl es 1.x:生成库libGLESv1_CM.so

frameworks\base\opengl\libs\EGL   :生成库libEGL.so

3、OpenGL的JNI部分

frameworks\base\core\jni\com_google_android_gles_jni_GLImpl.cpp

frameworks\base\core\jni\com_google_android_gles_jni_EGLImpl.cpp

二者分别对应egl和gl的实现。其中EGLImpl中的各个接口负责一个管理功能,而GLImpl中的各个接口对应于OpenGL的GLES/gl.h头文件中定义的各个OpenGL功能函数。

4、OpenGL的java接口API
标准opengl的类代码路径:
frameworks\base\opengl\java\javax\microedition\khronos\egl
frameworks\base\opengl\java\javax\microedition\khronos\opengles
这是标准的OpenGL类,主要的文件是GL10.java和GL11.java;在OpenGL ES中,主要的文件是EGL10.java。
android通过集成方式实现OpenGL标准的接口,代码路径为:
frameworks\base\opengl\java\com\google\android\gles_jni
这部分代码实现com.google.android.gles_jni包中的各个类,通过继承实现标准类javax.microedition.khronos.opengles中的类。
5、opengl和android系统结合的类的代码路径为:
frameworks\base\opengl\java\android\opengl
其中主要的类通过调用com.google.android.gles_jni包中的类和android基础GUI系统的类,主要功能是实现GLSurfaceView.
 
二、Echair及之前的android中的OpenGL结构。 

1、OpenGL的实现库

OpenGL的实现库由android自带软件库libagl(基于软件算法)实现,或者由各个不同平台的硬件libhgl实现,libhgl一般需要调用OpenGL的驱动程序实现。其中libagl的路径为:framework\base\opengl\libs\libagl:生成libagl.so,OpenGL的软件实现库。

不过目前本机上安装的android中没有这个路径。

如果需要构建其他的OpenGL库,需要使用egl.cfg配置文件来进行配置,并制定所使用的OpenGL库的路径。

2、OpenGL的本地框架库

头文件路径:

frameworks\base\opengl\include\EGL

frameworks\base\opengl\include\GLES

frameworks\base\opengl\include\GLES2

本地库的lib路径

frameworks\base\opengl\libs\EGL   :生成库libEGL.so

frameworks\base\opengl\libs\GLES_CM    ---opengl es 1.x:生成库libGLESv1_CM.so

frameworks\base\opengl\libs\GLES2   ---opengl es 2.x:生成库libGLESv2.so

3、OpenGL的JNI部分

frameworks\base\core\jni\android_opengl_GLES10.cpp

frameworks\base\core\jni\android_opengl_GLES10Ext.cpp

frameworks\base\core\jni\android_opengl_GLES11.cpp

frameworks\base\core\jni\android_opengl_GLES11Ext.cpp

frameworks\base\core\jni\android_opengl_GLES20.cpp

这些文件提供了OpenGL不同版本的各个类的支持。

4、OpenGL的java接口API

标准opengl的类代码路径:
frameworks\base\opengl\java\javax\microedition\khronos\egl
frameworks\base\opengl\java\javax\microedition\khronos\opengles
这是标准的OpenGL类,主要的文件是GL10.java、GL10Ext.java、GL11.java、GL11Ext.java、GL.java、GL11ExtensionPack.java;在OpenGL ES中,主要的文件依然是EGL10.java。
android通过继承方式实现OpenGL标准的接口,代码路径为:
frameworks\base\opengl\java\com\google\android\gles_jni
这部分代码实现com.google.android.gles_jni包中的各个类,通过继承实现标准类javax.microedition.khronos.opengles中的类。
5、opengl和android系统结合的类的代码路径为:
frameworks\base\opengl\java\android\opengl
其中主要的类通过调用com.google.android.gles_jni包中的类和android基础GUI系统的类,主要功能是实现GLSurfaceView.
 
四、移植的内容
主要包括两个方面:
驱动程序:OpenGL硬件加速要与硬件交互,因此需要在linux内核中提供驱动程序来控制硬件。在linux中,opengl使用非标准的驱动程序接口。
硬件实现库:在用户空间的opengl的实现库。
在eclair及之后的android中,opengl的移植还需要改写egl.cfg文件进行不同实现库的配置。

你可能感兴趣的:(android)