基于AndroidNDK进行OpenGLES开发作者: 刘鹏日期: 2010-02-08本文详细介绍了如何利用AnroidNDK开发nativeOpenGLES程序。NDK简介Android SDK提供了一套 OpenGL ES接口,该接口是基于Java的,速度非常慢,往往很难满足需要。NDK提供了一系列的工具,帮助开发者快速开发C(或C++)的动态库,并能自动将so和java应用一起打包成apk。使用NDK,我们可以将要求高性能的应用逻辑使用C开发,从而提高应用程序的执行效率。如 OpenGL ES的程序。2JNI对于NDK,在Java代码中调用C/C++代码是通过JNI实现的。JavaNativeInterface(JNI)是Java语言的本地编程接口,在java程序中,我们可以通过JNI实现一些用java语言不便实现的功能。通常有以下几种情况我们需要使用JNI来实现:java类库没有提供你的应用程序所需要的功能,通常这些功能是平台相关的;你希望使用一些已经有的类库或者应用程序,而他们并非用java语言编写的;程序的某些部分对速度要求比较苛刻,你选择用汇编或者c语言来实现并在java语言中调用他们。注意,不到万不得已不要使用JNI技术,一方面它需要你把握更多的知识才可以驾驭,一方面使用了JNI你的程序就会丧失可移植性。我们可以把JNI想象为本地代码和java代码的粘合剂,关系如下图所示3:OpenGL ESJava端核心代码如下所示:lassDemoActextendsActivity{privateGLSurfaceViewmGLView;***@OverrideprotectedvoidonCreate(BundlesavedInstanceState){(savedInstanceState);mGLView=newDemoGLSurfaceView(this);setContentView(mGLView);}......static{("sanangeles");}}classDemoGLSurfaceViewextendsGLSurfaceView{DemoRenderermRenderer;publicDemoGLSurfaceView(Contextcontext){super(context);mRenderer=newDemoRenderer();setRenderer(mRenderer);}{ativevoidnativeInit();ativevoidnativeResize(intw,inth);ativevoidnativeRender();ativevoidnativeDone();publicvoidonSurfaceCreated(GL10gl,EGLConfigconfig){nativeInit();}publicvoidonSurfaceChanged(GL10gl,intw,inth){nativeResize(w,h);}publicvoidonDrawFrame(GL10gl){nativeRender();}}注意:EGLContextLost
基于 Android NDK 进行 OpenGL ES开发 (1) 来自淘豆网www.taodocs.com转载请标明出处.