Sto lavorando per implementare completamente OpenGL ES 2.0 in C++ per Android.Android Native NDK OpenGL ES: API non implementata
Attualmente il nostro programma viene eseguito senza JNI o qualsiasi classe java nel progetto, utilizzando invece solo NativeActivity.
Concentrandosi sulla parte resa applicazione stessa, abbiamo ottenuto un metodo semplice:
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);
}
In Android.mk è stato incluso:
LOCAL_LDLIBS := -landroid -llog -lEGL -lGLESv1_CM -lOpenSLES -lGLESv2
E in AndroidManifest.xml è informato:
<uses-feature android:glEsVersion="0x00020000"></uses-feature>
Quindi, il programma esegue il debug e si compila senza problemi. Quando è impostato per funzionare, arriva il messaggio:
error libEGL called unimplemented OpenGL ES API
Il Forum dà un suggerimento praticabile per Java - Android: GLES20: Called unimplemented OpenGL ES API, tra cui il codice del comando setEGLContextClientVersion:
GLSurfaceView surfaceView = new GLSurfaceView(this);
surfaceView.setEGLContextClientVersion(2);
Tuttavia, il setEGLContextClientVersion è una specie di metodo wrapper pensato per java.
setEGLContextClientVersion non appartiene a OpenGL ES nativo e non può essere applicabile per lo sviluppo OGLES C++ nativo.
Pertanto, ho usato invece:
const EGLint attribList[] = {EGL_CONTEXT_CLIENT_VERSION, 2,EGL_NONE};
mContext = eglCreateContext(mDisplay, lConfig, EGL_NO_CONTEXT,attribList);
Ma l'errore non è ancora andato via.
Grazie amico! Ho seguito il tuo suggerimento. Ha risolto il problema. – ThreaderSlash