Android: GLES20: Se llama API OpenGL ES no implementada

Estoy recibiendo un error "Called unimplemented OpenGL ES API", al intentar el ejemplo GLES20, proporcionado por developer.android.com. He modificado la muestra, sin embargo. La razón era porque conseguí una IllegalArgumentException en GLSurfaceView.BaseConfigChooser.chooseconfig, así que substituí mGLSurfaceView.setEGLContextClientVersion( 2 );

El nuevo OnCreateMethod:

 protected void onCreate( Bundle savedInstanceState ) { super.onCreate( savedInstanceState ); mGLSurfaceView = new GLSurfaceView( this ); mGLSurfaceView.setEGLConfigChooser( new EGLConfigChooser() { @Override public EGLConfig chooseConfig( EGL10 egl, EGLDisplay display ) { EGLConfig[] configs = new EGLConfig[1]; int[] num_config = new int[1]; boolean check = false; int[] configSpec = { EGL10.EGL_DEPTH_SIZE, 16, EGL10.EGL_NONE }; check = egl.eglInitialize( display, new int[] { 2, 0 } ); if ( !check ) return null; check = false; check = egl.eglChooseConfig( display, configSpec, configs, 1, num_config ); if ( !check ) return null; return configs[0]; } } ); mGLSurfaceView.setEGLContextFactory( new EGLContextFactory() { @Override public void destroyContext( EGL10 egl, EGLDisplay display, EGLContext context ) { egl.eglDestroyContext( display, context ); } @Override public EGLContext createContext( EGL10 egl, EGLDisplay display, EGLConfig eglConfig ) { int[] attrib_list = new int[]{EGL10.EGL_VERSION, 2, EGL10.EGL_NONE}; EGLContext context = egl.eglCreateContext( display, eglConfig, EGL10.EGL_NO_CONTEXT, attrib_list ); return context; } }); mGLSurfaceView.setRenderer( new GLES20TriangleRenderer( this ) ); setContentView( mGLSurfaceView ); } 

El error "API de OpenGL ES no GLES20.glCreateShader; " se produce por ejemplo en GLES20.glCreateShader; O GLES20.glShaderSource .

Pensé, quizás para comprobar la versión, así que llamé gl.glGetString( GLES20.GL_VERSION ); En public void onSurfaceCreated( GL10 gl, EGLConfig config ) . GlGetString devolvió "OpenGL ES-CM 1.0". OnSurfaceCreated se llama después de elegir la configuración y crear el contexto, así que realmente no entiendo, por qué glGetString devuelve "OpenGL ES-CM 1.0".

Estoy usando Android 2.2 API y probé el ejemplo en un dispositivo Android 2.2 Virtual y en un HTC Wildfire, con Android 2.2.1.

Agradezco cualquier ayuda

Debe habilitar OpenGL ES 2.0 en su aplicación para Android.

En primer lugar, en tu AndroidManifest.xml, asegúrate de que tienes lo siguiente:

 <uses-feature android:glEsVersion="0x00020000"></uses-feature> <uses-sdk android:targetSdkVersion="8" android:minSdkVersion="8"></uses-sdk> 

En segundo lugar, crear una subclase de GLSurfaceView como este:

 public class CustomView extends GLSurfaceView { final CustomRenderer renderer; CustomView(Context context) { super(context); setEGLContextClientVersion(2); // This is the important line renderer = new CustomRenderer(); setRenderer(renderer); } } 

Para NDK

Asegúrese de que elige atributos y listas de atributos de contexto:

 const EGLint attribs[] = { EGL_SURFACE_TYPE, EGL_WINDOW_BIT, EGL_RENDERABLE_TYPE, EGL_OPENGL_ES2_BIT, EGL_BLUE_SIZE, 8, EGL_GREEN_SIZE, 8, EGL_RED_SIZE, 8, EGL_NONE }; eglChooseConfig(dpy, attribs, &config, 1, &numConfigs); const EGLint ContextAttribList[] = { EGL_CONTEXT_CLIENT_VERSION, 2, EGL_NONE }; context = eglCreateContext(GLapp.dpy, config, EGL_NO_CONTEXT, ContextAttribList); 

Ver este post – triangle opengl en android

Como se mencionó allí, los emuladores no soportan GL2, pero como menciona ese post, funcionó para mí en un dispositivo real.

Esto no es un error, sino una declaración. Simplemente le indica que su objetivo no es compatible con OpenGL ES versión 2.0.

Puede ser porque está utilizando la instancia GL10 que estamos recibiendo como parámetro en onSurfaceCreated (), onSurfaceChanged () y onDrawFrame () en la implementación de Renderer. Puesto que usted intenta usar OpwnGL ES 2.0, podemos y probablemente no usar la instancia y usar una alternativa en su lugar. ¡Hay alternativas! ¡Éstas son las razones por las que vemos esos nombres de los parámetros y unUsed o similar en códigos a través de la red!

  • Dibujo de mapas de bits más rápido en el lienzo de Android o OpenGL
  • Forzar OpenGL Buffer para usar GL 1.0 o 1.1?
  • ¿Cómo superponer GLSurfaceView sobre un MapView en Android?
  • Uso de objetos de búfer de píxeles (PBO) en Android
  • Android: Decidir entre SurfaceView y OpenGL (GLSurfaceView)
  • ¿Cómo funciona la función gluProject? No puedo entenderlo
  • ¿Cuál es la forma más fácil de dibujar línea con OpenGL-ES (android)
  • ¿Por qué mi rendimiento aumenta al tocar la pantalla?
  • Compensaciones para datos por vértice intercalados en OpenGL ES en Android
  • Cómo forzar el modo de paisaje con NDK utilizando códigos C ++ puros
  • ¿Cuál es la forma más fácil de dibujar textura con OpenGL ES?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.