gpt4 book ai didi

Android:OpenGL 上下文何时被销毁?

转载 作者:可可西里 更新时间:2023-11-01 18:56:11 29 4
gpt4 key购买 nike

在 android 上,GLSurfaceView 文档是这样说的:

A GLSurfaceView must be notified when the activity is paused and resumed. GLSurfaceView clients are required to call onPause() when the activity pauses and onResume() when the activity resumes. These calls allow GLSurfaceView to pause and resume the rendering thread, and also allow GLSurfaceView to release and recreate the OpenGL display.

所以我应该在我的 Activity 中做这样的事情:

public void onPause() {
myGlSurfaceView.onPause();
}

public void onResume() {
myGlSurfaceView.onResume();
}

我在我的代码中观察到,如果我不调用 onPause()onResume() 那么当我按下主页按钮时上下文不会丢失,这样我就可以在应用程序之间切换,然后返回我的游戏,一切正常。我看到的是,如果我使用后退按钮关闭游戏,那么当我再次打开它时屏幕会变黑,但我可以更改后退按钮的行为以完全关闭游戏并避免此问题。

所以我的问题是:OpenGL 上下文何时被销毁?如果我不调用 onPause()onResume() 我可以假设它永远不会被销毁吗?

编辑:

我的目标是 Android 2.2,所以 setPreserveEGLContextOnPause() 不是我的选择。

最佳答案

OpenGL 可能仅在调用 Actvity::onPause() 后丢失,并且仅在这种情况下。查看setPreserveEGLContextOnPause文档:

Whether the EGL context is actually preserved or not depends upon whether the Android device that the program is running on can support an arbitrary number of EGL contexts or not. Devices that can only support a limited number of EGL contexts must release the EGL context in order to allow multiple applications to share the GPU. [...] the EGL context [can be] released when the GLSurfaceView is paused, and recreated when the GLSurfaceView is resumed.

编辑:文档中描述的情况适用于所有 Android 版本。无论您是否有权访问 setPreserveEGLContextOnPause

在我看来,这是 Android OGLES 实现的一个主要缺点:您无法确定。

documentation本身是模糊的(EGL 上下文丢失注释):

There are situations where the EGL rendering context will be lost. This typically happens when device wakes up after going to sleep

我注意到主页和后退按钮的行为与您相同。调用不完全相同(但不能准确记住它们)。

确保 OpenGL 上下文可用的唯一方法是在 onSurfaceCreated 中创建所有 OpenGL 资源。

关于 setPreserveEGLContextOnPause 的注意事项。再一次,这个 documentation comment演示上下文破坏的“随机”行为:

If set to true, then the EGL context may be preserved when the GLSurfaceView is paused. [...]

关于Android:OpenGL 上下文何时被销毁?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11067881/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com