Android NDK Native OpenGL ES: implementierte API

Ich arbeite an der Umsetzung einer OpenGL ES 2.0 vollständig in C++ für Android.

Derzeit ist unser Programm läuft ohne JNI oder eine java-Klasse in das Projekt, nutzen statt nur NativeActivity.

Fokussierung auf die Anwendung rendering-Teil selbst, haben wir eine einfache Methode:

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 war enthalten:

LOCAL_LDLIBS    := -landroid -llog -lEGL -lGLESv1_CM -lOpenSLES -lGLESv2

Und in AndroidManifest.xml informiert:

    <uses-feature android:glEsVersion="0x00020000"></uses-feature>

So, das Programm debuggt und kompiliert, ohne Probleme. Wenn Sie auf ausführen, kommt die Meldung:

    error  libEGL   called unimplemented OpenGL ES API

Des Forums gibt einen Vorschlag praktikabel für java - Android: GLES20: Called unimplemented OpenGL ES API , einschließlich der code den Befehl setEGLContextClientVersion:

    GLSurfaceView surfaceView = new GLSurfaceView(this);
    surfaceView.setEGLContextClientVersion(2);

Jedoch die setEGLContextClientVersion ist eine Art wrapper-Methode bedeutete für java.

Den setEGLContextClientVersion gehört nicht auf native OpenGL ES und kann nicht sein anwendbar für native C++ OGLES Entwicklung.

Deshalb verwendete ich statt:

const EGLint attribList[] = {EGL_CONTEXT_CLIENT_VERSION, 2,EGL_NONE};
mContext = eglCreateContext(mDisplay, lConfig, EGL_NO_CONTEXT,attribList);

Aber der Fehler ist nicht verschwunden noch.

Schreibe einen Kommentar