简历后在Android中丢失OpenGL纹理

时间:2011-05-11 14:28:21

标签: android opengl-es textures

我的游戏工作正常,除非我按HOME按钮然后恢复。需要做什么才能再次使用纹理?我试过在GLSurfaceView上调用onPause和onResume(当调用activity的onPause和onResume时)。

任何想法我可能做错了什么?

3 个答案:

答案 0 :(得分:6)

如果所有其他方法都失败了,请重新加载纹理:

伪代码

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

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

答案 1 :(得分:4)

即使您解决了问题,也只是提供一些可能有助于他人的解释。

Android不保证在活动暂停时保持OpenGL上下文的活动状态。

你必须在简历上重新创建每个OpenGL资源(在你的情况下是纹理,还有VBO等)。

从API 11开始,您可以ask kindly Android来保留上下文,但它没有保证。

答案 2 :(得分:2)

尝试后:

  1. 不要在Activity的onPause / onResume
  2. 中调用GLSurfaceView#onPause / onResume
  3. 调用GLSurfaceView#onPause / onResume,还设置GLSurfaceView#setPreserveEGLContextOnPause(true)
  4. 这两种情况都解决了HOME-resume-black-texture问题。 猜测Android实现无法在恢复时重新创建EGL上下文。由于需要调用onPause / onResume,因此应始终将setPreserveEGLContextOnPause设置为true。