Android SDK 提供了一套 OpenGL ES 接口,该接口是基于 Java 的,速度非常 慢,往往很难满足需要。写此文章的目的是为了使用Android 提供的NDK 工具来使用C/C++ 原生代码。因最近在研究Android OpenGL ES 部分,就以使用C++ 来书写opengles 代码, 然后通过JNI 提供给java调用。重要的是避免了调用Android SDK OpenGL ES 接口,是速度大大提高 。
首先告知大家我使用的平台:(本文将省略如何安装Eclipse ,ADT,及如何配置Android sdk等..)
Linux Fedora 12 ,Eclipse Helios版本,Android SDK 2.2,Android NDK r4(目前最新)
安装NDK:
首先去官网下载Android NDK ,在此给提供一个免翻墙的网站:
http://androidappdocs.appspot.com/sdk/ndk/index.html ,并将其加压到任意目录(后文以#NDK 来代表解压目录)
本文不会大多关注代码部分的讲解,我会将主要代码贴出,并在此文的提供给大家源码下载.文中有关于android.mk 代码的编写,可自行参考#NDK/doc/ANDROID-MK.TXT 文档。
1,在Eclipse 下新建Android 项目 (名字:OpenGl_Jni 包:com.opengl.jni) 新建以下四个类
Activity 类 :
package com.opengl.jni;
import android.app.Activity;
import android.os.Bundle;
public class GLActivity extends Activity {
/** Called when the activity is first created. */
private GLCanvas mCanvas;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mCanvas = new GLCanvas(getApplication());
setContentView(mCanvas);
}
...........................
}
GlCanvas 类继承GLSurfaceView类:
package com.opengl.jni;
public class GLCanvas extends GLSurfaceView {
private static final String TAG = "GLCanvas";
private static final boolean DEBUG = false;
public GLCanvas(Context context) {
super(context);
// TODO Auto-generated constructor stub
init(false, 0, 0);
}
public GLCanvas(Context context, boolean translucent, int depth, int stencil) {
super(context);
init(translucent, depth, stencil);
}
................
}
GLRenderer 类实现GLSurfaceView.Renderer 接口 :如下