Потеря OpenGL текстур в Android после возобновления

Моя игра работает правильно, за исключением случая, когда я нажимаю кнопку HOME, а затем возобновляю. Что нужно сделать, чтобы снова использовать текстуры? Я попытался вызвать onPause и onResume на GLSurfaceView (когда вызываются операции onPause и onResume).

Любые идеи, что я могу делать неправильно?

Если все остальное не удается, перезагрузите текстуры:

ПСЕВДОКОД

for tex in textures: if glIsTexture(tex.opengl_name) == false: glGenTextures(1, &tex.opengl_name) glBindTexture(tex.texture_target); glTexImage(..., texture.image); 

Даже если вы исправили свою проблему, просто дайте немного объяснений, которые могли бы помочь другим.

Android не гарантирует сохранение контекста OpenGL при приостановке действия.

Вам нужно воссоздать все ресурсы OpenGL при возобновлении (текстура в вашем случае, но также VBOs и т. Д.).

Начиная с API 11, вы можете попросить Android поддерживать контекст, но нет никакой гарантии.

После попытки:

  1. Не называть GLSurfaceView # onPause / onResume в Activity onPause / onResume
  2. Вызовите GLSurfaceView # onPause / onResume, но также установите GLSurfaceView # setPreserveEGLContextOnPause (true)

Оба случая фиксируют проблему HOME-resume-black-texture. Уверенная реализация Android не смогла повторно создать контекст EGL при возобновлении. Поскольку onPause / onResume необходимо вызвать, всегда следует устанавливать для setPreserveEGLContextOnPause значение true.