【发布时间】:2012-06-16 23:42:25
【问题描述】:
在 android 上,GLSurfaceView 文档是这样说的:
活动暂停时必须通知 GLSurfaceView 并且 恢复。 GLSurfaceView 客户端需要调用 onPause() 时 当活动恢复时活动暂停和 onResume()。这些电话 允许 GLSurfaceView 暂停和恢复渲染线程,并且 允许 GLSurfaceView 释放并重新创建 OpenGL 显示。
所以我应该在我的活动中做这样的事情:
public void onPause() {
myGlSurfaceView.onPause();
}
public void onResume() {
myGlSurfaceView.onResume();
}
我在我的代码中观察到,如果我不调用onPause() 和onResume(),那么当我按下主页按钮时上下文不会丢失,因此我可以在应用程序之间切换然后返回我的游戏一切正常。我看到的是,如果我使用后退按钮关闭游戏,那么当我再次打开它时屏幕是黑色的,但我可以更改后退按钮的行为以完全关闭游戏并避免这个问题。
所以我的问题是:OpenGL 上下文何时被销毁?如果我不打电话给onPause() 和onResume(),我可以假设它永远不会被销毁吗?
编辑:
我的目标是 Android 2.2,所以setPreserveEGLContextOnPause() 不适合我。
【问题讨论】:
-
我很想知道 myGlSurfaceView.getPreserveEGLContextOnPause() 的值。如果将其设置为 true,那么您的上下文可能会被保留。请参阅developer.android.com/reference/android/opengl/… 了解更多信息。
-
@RodHyde 抱歉,我忘了说我的目标是 Android 2.2
-
这里是使用 GLSurface 进行绘图的代码。 code.google.com/p/andengine/source/browse/src/org/anddev/…
-
您找到适用于 Android 3.0 之前的好的解决方案了吗?我只能重建上下文并重新加载纹理,这会导致长时间的空白屏幕加载或弹出看起来很糟糕的精灵。