我正在努力在C++ for Android中完全實現OpenGL ES 2.0。Android原生NDK OpenGL ES:未實現API
當前我們的程序在項目中運行時沒有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,不適用於本地C++ OGLES開發。
因此,我代替:
const EGLint attribList[] = {EGL_CONTEXT_CLIENT_VERSION, 2,EGL_NONE};
mContext = eglCreateContext(mDisplay, lConfig, EGL_NO_CONTEXT,attribList);
但錯誤並沒有消失呢。
謝謝你!我遵循你的建議。它解決了這個問題。 – ThreaderSlash 2012-02-28 07:36:43