我正在努力实现一个完全基于C++的OpenGL ES 2.0版本,用于Android。
目前,我们的程序在项目中没有使用JNI或任何Java类,而是仅使用NativeActivity。
在关注应用渲染部分时,我们采用了一种简单的方法:
renderWorld()
{ GLfloat vVertices[] = { 0.0f, 0.5f, 0.0f,
-0.5f, -0.5f, 0.0f,
0.5f, -0.5f, 0.0f };
glClear ( GL_COLOR_BUFFER_BIT );
glVertexAttribPointer ( 0, 3, GL_FLOAT, GL_FALSE, 0, vVertices );
glEnableVertexAttribArray ( 0 );
glDrawArrays (GL_TRIANGLES, 0, 3 );
}
在 Android.mk 中已经包含了:
LOCAL_LDLIBS := -landroid -llog -lEGL -lGLESv1_CM -lOpenSLES -lGLESv2
在AndroidManifest.xml中有如下信息:
<uses-feature android:glEsVersion="0x00020000"></uses-feature>
所以,该程序没有问题地进行了调试和编译。当设置运行时,出现以下消息:
error libEGL called unimplemented OpenGL ES API
论坛提供了一个对于Java有用的建议——Android: GLES20: Called unimplemented OpenGL ES API,其中包括将命令setEGLContextClientVersion添加到代码中:
GLSurfaceView surfaceView = new GLSurfaceView(this);
surfaceView.setEGLContextClientVersion(2);
然而,setEGLContextClientVersion方法是为java设计的包装器方法。
setEGLContextClientVersion不属于OpenGL ES本身,并且不能用于本地C++ OGLES开发。
因此,我使用了以下方法代替:
const EGLint attribList[] = {EGL_CONTEXT_CLIENT_VERSION, 2,EGL_NONE};
mContext = eglCreateContext(mDisplay, lConfig, EGL_NO_CONTEXT,attribList);
但是错误还没有被解决。