【发布时间】:2012-03-17 02:41:40
【问题描述】:
我正在努力为 Android 完全用 C++ 实现 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);
但是错误还没有消失。
【问题讨论】:
标签: c++ opengl-es android-ndk setup-deployment native-code