Compartir el contexto EGL2.0 entre 2 GLSurfaceViews causó EGL_BAD_ACCESS en las tabletas Android

Intento compartir el contexto de EGL bwteen 2 GLSurfaceViews por código siguiente:

createContext(EGL10 egl, EGLDisplay display, EGLConfig eglConfig) { EGLContext shared = ...; // a cached egl context int[] attrib_list = { EGL_CONTEXT_CLIENT_VERSION, 2, EGL10.EGL_NONE }; EGLContext context = egl.eglCreateContext(display, eglConfig, shared == null ? EGL10.EGL_NO_CONTEXT : shared, attrib_list); return context; } } 

El código funciona en la mayoría de los teléfonos Android (OS> = 2.2), pero no en todas las tabletas probadas.

01-12 18: 33: 35.381: E / AndroidRuntime (12171): EXCEPCIÓN FATAL: GLThread 11

01-12 18: 33: 35.381: E / AndroidRuntime (12171): java.lang.RuntimeException: eglMakeCurrent falló: EGL_BAD_ACCESS

01-12 18: 33: 35.381: E / AndroidRuntime (12171): en android.opengl.GLSurfaceView $ EglHelper.throwEglException (GLSurfaceView.java:1146)

Desde que declaré LOCAL_LDLIBS: = -lGLESv2, el EGL es un contexto 2.0.

Por qué falló en las tabletas (xoom, galaxia, lg, sony, etc)

Cualquier discernimiento es apreciado.

Dos posibles razones para este error (de la especificación EGL):

  • Si ctx está al corriente de algún otro subproceso, o si el dibujo o la lectura están enlazados a contextos en otro subproceso, se genera un error EGL_BAD_ACCESS.
  • Si el enlace ctx supera el número de contextos actuales de ese tipo de API de cliente soportado por la implementación, se genera un error EGL_BAD_ACCESS.

También podría ser que la GPU que está utilizando en las tabletas no admita el contexto compartido.

Lo más probable es que las siguientes líneas son motivo del error en GLSurfaceView.

 public GL createSurface(SurfaceHolder holder) { .... /* * Before we can issue GL commands, we need to make sure * the context is current and bound to a surface. */ if (!mEgl.eglMakeCurrent(mEglDisplay, mEglSurface, mEglSurface, mEglContext)) { throwEglException("eglMakeCurrent"); } } 
  • Vertex Buffer Objects (VBO) no funciona en Android 2.3.3, con GLES20
  • For-loop en código de sombreado que trabaja con un número codificado pero no con una variable uniforme
  • Parpadeo de la pantalla de OpenGL ES 2.0
  • Android OpenGL ES Soporte en todas partes?
  • Android OpenGL ES 2.0: No obtengo resultados que quiero con Matrix.traslateM
  • Cómo forzar el modo de paisaje con NDK utilizando códigos C ++ puros
  • Uso de FBO para grabar la pantalla en Android
  • Manera de reiniciar fondo de pantalla en vivo
  • Escena de OpenGL con fondo transparente + widgets nativos por debajo y por encima
  • Android Opengl FBO fuera de la pantalla
  • Cómo dibujar círculo básico en OpenGL ES 2.0 Android
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.