2011-05-11 30 views
5

Mi juego funciona correctamente, excepto en el caso en que presiono el botón INICIO y luego reanudo. ¿Qué se necesita hacer para usar las texturas nuevamente? Intenté llamar a OnPause y onResume en GLSurfaceView (cuando se invocan las actividades onPause y onResume).Perder Texturas OpenGL en Android después de un currículum

¿Alguna idea de lo que podría estar haciendo mal?

+0

¿Podría publicar algunas muestras de código? – BadSkillz

+1

@BadSkillz No estoy seguro de qué código es relevante. Mi actividad/Vista y Renderer? Estoy cargando las texturas usando código nativo. ¿Qué se necesita hacer para restaurar las texturas? ¿Debo volver a cargar desde el disco? –

Respuesta

6

Si todo lo demás falla, vuelva a cargar las texturas:

Pseudocódigo

for tex in textures: 
    if glIsTexture(tex.opengl_name) == false: 
     glGenTextures(1, &tex.opengl_name) 

    glBindTexture(tex.texture_target); 
    glTexImage(..., texture.image); 
+0

Lo intenté, pero por alguna razón los textureIds parecían estar mezclados (la textura de mi fuente se aplicó en el lugar equivocado, por ejemplo). Voy a perseverar y darle otra oportunidad –

+0

Gracias, lo conseguí trabajando. La falta de sueño de un bebé recién nacido causó un par de errores. Con la cabeza despejada funciona bien :) –

4

Incluso si solucionado su problema, sólo para dar un poco de explicación que podría ayudar a los demás.

Android no garantiza mantener vivo el contexto OpenGL cuando la actividad está en pausa.

Tienes que volver a crear todos los recursos de OpenGL en el currículum (textura en tu caso, pero también VBO, etc., etc.).

Desde API 11, puede ask kindly Android para mantener el contexto, pero no hay garantía de que lo haga.

+0

Recargué las texturas para solucionar el problema. Acabo de cometer un error al hacer eso :) –

+0

¿Cómo se puede saber si OpenGL de hecho ha preservado su contexto para guardar la recarga innecesariamente? –

+0

Acabo de enterarme de getPreserveEGLContextOnPause(). Si esto es cierto, ¿está GARANTIZADO de mantener el contexto? –

2

Después de probar:

  1. no llame GLSurfaceView # onPause/onResume en onPause de Actividad/onResume
  2. llamada GLSurfaceView # onPause/onResume, sino también establecer GLSurfaceView # setPreserveEGLContextOnPause (verdadero)

Ambos casos solucionan el problema HOME-resume-black-texture. La implementación de Guess Android no pudo volver a crear el contexto EGL cuando se reanudó. Como onPause/onResume es obligatorio para llamar, siempre debe establecer setPreserveEGLContextOnPause en verdadero.

Cuestiones relacionadas