我正在努力用 C++ for Android 完全实现 OpenGL ES 2.0。
目前我们的程序在没有 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 native,不能适用于native C++ OGLES 开发。
因此,我改用:
const EGLint attribList[] = {EGL_CONTEXT_CLIENT_VERSION, 2,EGL_NONE};
mContext = eglCreateContext(mDisplay, lConfig, EGL_NO_CONTEXT,attribList);
但是错误还没有消失。