2012-02-27 20 views
5

Estoy trabajando para implementar un OpenGL ES 2.0 completamente en C++ para Android.Android nativo NDK OpenGL ES: API no implementada

Actualmente nuestro programa se ejecuta sin JNI o ​​cualquier clase de Java en el proyecto, utilizando en su lugar solo NativeActivity.

Centrándose en la propia aplicación de renderización parte, tenemos un método sencillo:

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); 
} 

En Android.mk se incluyó:

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

Y en AndroidManifest.xml se informa:

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

Por lo tanto, el programa depura y compila sin problemas. Cuando se configura para funcionar, viene el mensaje:

error libEGL called unimplemented OpenGL ES API 

El Foro da una sugerencia viable para Java - Android: GLES20: Called unimplemented OpenGL ES API, incluyendo el código de la setEGLContextClientVersion comando:

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

Sin embargo, el setEGLContextClientVersion es una especie de método de envoltura para Java.

El setEGLContextClientVersion no pertenece a OpenGL ES nativo, y no puede ser aplicable para el desarrollo nativo de C++ OGLES.

Por lo tanto, he usado en su lugar:

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

Pero el error no ha desaparecido todavía.

Respuesta

6

¿Está utilizando un dispositivo real (¿cuál?), O está en un emulador (que no es compatible con OGL ES2)? Además, no estoy seguro si vincular GLESv1_CM y GLESv2 en la misma aplicación es una buena idea. Si desea OpenGL ES 2.0, solo enlace a GLESv2.

¿Cómo se inicializó el contexto de EGL? ¿Ha utilizado el atributo EGL EGL_OPENGL_ES2_BIT como:

EGLint aEGLAttributes[] = 
{ 
    EGL_RENDERABLE_TYPE, EGL_OPENGL_ES2_BIT, // <--- OpenGL ES 2.0 
    ... 
    EGL_NONE 
}; 
... 
eglChooseConfig(m_EGLDisplay, aEGLAttributes, aEGLConfigs, 1, 
      &cEGLConfigs) 
... 
+0

Thanks man! Seguí tu sugerencia. Solucionó el problema. – ThreaderSlash

Cuestiones relacionadas