Question

I am working to implement an OpenGL ES 2.0 fully in C++ for Android.

Currently our program runs without JNI or any java class in the project, using instead only NativeActivity.

Focusing on the application rendering part itself, we got a simple method:

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 was included:

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

And in AndroidManifest.xml is informed:

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

So, the program debugs and compiles with no problem. When set to run, comes the message:

    error  libEGL   called unimplemented OpenGL ES API

The Forum gives a suggestion workable for java - Android: GLES20: Called unimplemented OpenGL ES API , including to the code the command setEGLContextClientVersion:

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

However, the setEGLContextClientVersion is kind of a wrapper method meant for java.

The setEGLContextClientVersion does not belong to OpenGL ES native, and can not be applicable for native C++ OGLES development.

Therefore, I used instead:

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

But the error has not gone away yet.

Was it helpful?

Solution

Are you using real device (which?), or you are on emulator (which doesn't support OGL ES2)? Also I'm not sure if linking GLESv1_CM and GLESv2 in same app is a good idea. If you want OpenGL ES 2.0, then link only to GLESv2.

How did you initalized EGL context? Did you used EGL attribute EGL_OPENGL_ES2_BIT like:

EGLint aEGLAttributes[] =
{
    EGL_RENDERABLE_TYPE, EGL_OPENGL_ES2_BIT, // <--- OpenGL ES 2.0
    ...
    EGL_NONE
};
...
eglChooseConfig(m_EGLDisplay, aEGLAttributes, aEGLConfigs, 1,
            &cEGLConfigs)
...
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top