2010-06-22 10 views
6

Estoy tratando de encontrar una manera de comprobar si existe un EGLContext actual y está listo para usar en Android. Por especificación, He intentado usarLlamar para verificar si existe un EGLContext actual en Android

((EGL10) EGLContext.getEGL()). EglGetCurrentContext()

y luego compararlo con EGL10.EGL_NO_CONTEXT (.equals tratado() y! =). Sin embargo, aunque a través de la depuración parece que está devolviendo una instancia de 'EGL_NO_CONTEXT' (parece que significa que todos los valores internos no están inicializados), no importa qué comparación haga, no puedo hacer que funcione.

¿Alguien sabe de otro/método apropiado para hacer esto? No quiero hacerlo lanzando una llamada al azar GL y capturando el EGLError ...

Respuesta

0

Puede intentar probarlo para ver si es nulo, en lugar de igual a un contexto dado. Esto es lo que haría en un programa opengl estándar.

[EDIT] Hay un ejemplo here que lo utiliza de la siguiente manera:

if ((eglGetCurrentContext() != context->egl_context) || 
    (eglGetCurrentSurface (EGL_READ) != drawable->egl_surface)) 

No sé si eso es ninguna ayuda.

+1

Nunca vuelve nulo tristemente. Lo he depurado y el EGLContexto que Android me proporciona de eglGetCurrentContext() no es actual, ya que las operaciones que lo utilizan me dan el error "Sin contexto actual configurado". – Moncader

+0

¿Hay algún tipo de error en su proceso de inicialización, entonces?Cuando tuve un vistazo rápido para su problema, encontré varias piezas de código de ejemplo pero nada con ningún error al verificarlo. Tal vez deberías verificar tus rutinas de inicialización en línea con lo que está en los ejemplos por ahora y encontrar el error al verificar cosas más tarde. También puede consultar en algunos sitios más centrados en Android, y seguir buscando actualizaciones aquí. Además, si una de sus otras avenidas vale la pena, asegúrese de publicar la solución aquí para ayudar a otros a encontrarla. – Amos

+0

Ya tengo una aplicación totalmente funcional. Sin embargo, tengo algunas situaciones en las que quiero cargar texturas en la memoria cuando Android no ha establecido un contexto GL actual (si no conoces Android, bueno, así es como funciona). Obviamente, esto no es posible, así que cuando detecto que no hay un contexto actual, anexaré ese mapa de bits a una cola para agregarlo a VRAM cuando el contexto vuelva a estar disponible. – Moncader

2

Parece que hay un error en la aplicación de EGL10.eglGetCurrentContext(), donde el resultado de eglGetCurrentContxt() tiene que ser comparado usando

result.equals(EGL10.EGL_NO_CONTEXT) 

en lugar de

result == EGL10.EGL_NO_CONTEXT 

Por ejemplo de Android :

if (((EGL10) EGLContext.getEGL()).eglGetCurrentContext().equals(EGL10.EGL_NO_CONTEXT)) { 
    // no current context. 
} 
2

Me encontré con el problema de no poder re-u se el EGLContext actual al intentar mostrar lo que estaba en pantalla en un GLSurfaceView a una EGLPixelBufferSurface fuera de pantalla. De lo que puedo decir, el problema de usar el método estático

EGLContext.getEgl()

es que crea una instancia de EGL defecto - esto significaría que la EGLContext asociada a ella es equivalente a EGL10.EGL_NO_CONTEXT.

Además, en Android, EGLContext solo se puede asociar a un hilo (el desarrollador de Android Romain Guy lo dice así here). Así que con el fin de utilizar adecuadamente

EGL.getCurrentContext()

que tendría que tener una instancia de EGL preexistente y llame al método getCurrentContext() en el subproceso que creó el EGLContext.

NOTA: Android ahora se encarga de guardar el EGLContext cuando el GLThread se pausa/se reanuda en la clase GLSurfaceView (eche un vistazo al método setPreserveEGLContextOnPause(boolean preserveOnPause)).

Cuestiones relacionadas