预览加载中,请您耐心等待几秒...
1/5
2/5
3/5
4/5
5/5

在线预览结束,喜欢就下载吧,查找使用更方便

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

OpenGLESC本地程序 1.OpenGLES、JNI与本地程序 Android平台提供了一套Java版本的OpenGLES,其速度很慢。不过,你可以 利用JNI接口来开发本地的*.so动态库,并利用NDK工具来将*.so和Java应用代码 打包起来成为*.apk而发布出去。藉由本地代码来大幅提升应用程序的执行速度。 此外,如果你已经在别的平台上开发了一些C/C++的OpenGL程序,想把这些代码 移植到Android平台上,JNI也能协助你将这些C/C++程序与上层Java代码结合起来, 你就不必将C/C++代码改写为Java代码了。 Android对3D的调用曾经让我迷惑了一段时间,因为在framewoks/base/core/jni这 个目录一直没找到跟opengl相关的内容,后面去仔细看看opengl里面的内容才知道 Android把opengl的本地实现,JNI,java接口都放在/frameworks/base/opengl下面了, 而且它内部还带了一个工具可以生成JNI代码。 我们来看看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的生成工具 Opengl编程谁都知道是一个大工程,我觉得现在对3D的需求应该是很低的,很多效果 我们使用skia也可以实现。所以我觉得将来的重点应该还是放在skia上面。 49 2.OpenGLESC范例 Java端核心代码如下所示: publicclassDemoActextendsActivity{ privateGLSurfaceViewmGLView; @Override protectedvoidonCreate(BundlesavedInstanceState){ super.onCreate(savedInstanceState); mGLView=newDemoGLSurfaceView(this); setContentView(mGLView); } ...... static{ System.loadLibrary("sanangeles"); } } classDemoGLSurfaceViewextendsGLSurfaceView{ DemoRenderermRenderer; publicDemoGLSurfaceView(Contextcontext){ super(context); mRenderer=newDemoRenderer(); setRenderer(mRenderer); } classDemoRendererimplementsGLSurfaceView.Renderer{ privatestaticnativevoidnativeInit(); privatestaticnativevoidnativeResize(intw,inth); privatestaticnativevoidnativeRender(); privatestaticnativevoidnativeDone(); publicvoidonSurfaceCreated(GL10gl,EGLConfigconfig){ nativeInit(); } publicvoidonSurfaceChanged(GL10gl,intw,inth){ nativeResize(w,h); } publicvoidonDrawFrame(GL10gl){ nativeRender(); } } JNI代码如下所示: #include<jni.h> 50 ... /*Calltoinitializethegraphicsstate*/ void Java_com_example_AndMii_DemoRenderer_nativeInit(JNIEnv*env) { appInit(); } /*Calltofinalizethegraphicsstate*/ void Java_com_ex