Pracuję nad wdrożeniem OpenGL ES 2.0 w pełni w C++ dla Androida.Android Native NDK OpenGL ES: niezatwierdzony interfejs API
Obecnie nasz program działa bez JNI lub dowolnej klasy Java w projekcie, wykorzystując zamiast tego tylko NativeActivity.
Skupiając się na samej części renderowania aplikacji, mamy prostą metodę:
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);
}
W Android.mk zostało wliczone:
LOCAL_LDLIBS := -landroid -llog -lEGL -lGLESv1_CM -lOpenSLES -lGLESv2
I AndroidManifest.xml jest poinformowana
<uses-feature android:glEsVersion="0x00020000"></uses-feature>
Program więc bez problemu debuguje i kompiluje. Kiedy ustawiony do pracy, przychodzi wiadomość:
error libEGL called unimplemented OpenGL ES API
Forum daje sugestię wykonalne dla java - Android: GLES20: Called unimplemented OpenGL ES API, łącznie z kodem z setEGLContextClientVersion polecenia:
GLSurfaceView surfaceView = new GLSurfaceView(this);
surfaceView.setEGLContextClientVersion(2);
Jednak setEGLContextClientVersion to rodzaj metoda wrapper przeznaczona dla języka Java.
Zestaw setEGLContekstClientVersion nie należy do języka OpenGL ES i nie może być stosowany do natywnego programowania w języku C++ OGLES.
Dlatego użyłem zamiast:
const EGLint attribList[] = {EGL_CONTEXT_CLIENT_VERSION, 2,EGL_NONE};
mContext = eglCreateContext(mDisplay, lConfig, EGL_NO_CONTEXT,attribList);
ale błąd nie zniknął jeszcze.
Dzięki! Poszedłem za twoją sugestią. Rozwiązał problem. – ThreaderSlash