Dam*_*ian 14 android opengl-es
在android上,GLSurfaceView文档说这个:
当活动暂停并恢复时,必须通知GLSurfaceView.GLSurfaceView客户端需要在活动暂停时调用onPause(),并在活动恢复时调用onResume().这些调用允许GLSurfaceView暂停和恢复渲染线程,并允许GLSurfaceView释放并重新创建OpenGL显示.
所以我应该在我的活动中做这样的事情:
public void onPause() {
myGlSurfaceView.onPause();
}
public void onResume() {
myGlSurfaceView.onResume();
}
Run Code Online (Sandbox Code Playgroud)
我在我的代码中观察到,如果我不调用onPause(),onResume()然后按下主页按钮时上下文不会丢失,那么我可以在应用程序之间切换,然后返回到我的游戏,一切正常.我看到的是,如果我使用后退按钮关闭游戏,那么当我再次打开它时屏幕是黑色的,但我可以改变后退按钮行为以完全关闭游戏并避免这个问题.
所以我的问题是:什么时候OpenGL上下文被破坏了?如果我不打电话onPause(),onResume()我可以假设它永远不会被销毁吗?
编辑:
我的目标是Android 2.2,因此setPreserveEGLContextOnPause()不适合我.
roc*_*eye 27
只有在调用Actvity :: onPause()之后,OpenGL才会丢失,并且仅在这种情况下.请参阅setPreserveEGLContextOnPause文档:
是否实际保留EGL上下文取决于运行该程序的Android设备是否可以支持任意数量的EGL上下文.只能支持有限数量的EGL上下文的设备必须释放EGL上下文才能允许多个应用程序共享GPU.[...] 当GLSurfaceView暂停时,可以释放EGL上下文,并在GLSurfaceView恢复时重新创建.
编辑:文档中描述的情况适用于所有Android版本.无论您有权访问setPreserveEGLContextOnPause
在我看来,这是Android OGLES实现的一个主要缺点:你无法确定.
该文档本身是模糊的(EGL上下文丢失注):
在某些情况下,EGL渲染上下文将丢失.这通常发生在设备进入睡眠状态后唤醒时
我注意到与Home和Back按钮相同的行为.呼叫不完全相同(但不能准确记住它们).
确保OpenGL上下文可用的唯一方法是在onSurfaceCreated中创建所有OpenGL资源
关于setPreserveEGLContextOnPause的注意事项.再次,此文档注释 演示了上下文破坏的"随机"行为:
如果设置为true,则可以在GLSurfaceView暂停时保留 EGL上下文.[...]
| 归档时间: |
|
| 查看次数: |
16716 次 |
| 最近记录: |