你能描述一下我什么时候应该重新创建 vbos、着色器、纹理吗?我知道 OpenGL 函数是在单独的线程中调用的。我在Activity的onResume中调用了GLSurfaceView的onResume方法(与onPause方法相同)。 什么时候 GLContext 丢失了? 让我们假设用户触摸主页按钮。 Activity 的 onPause 方法被调用。我应该删除 vbo、着色器、纹理吗?或者我应该在调用 onDestroy 时删除那些资源(恢复 GL 线程以删除它们?)?如果用户触摸后退按钮怎么办? 另一个问题。我应该在 Java 中保留位图、顶点属性以重新初始化 VBO、纹理吗? 现在,每次调用 Activity 的 onPaused 方法时,我都会删除所有着色器、vbos 和纹理。我向事件队列发送一个特殊事件。在 onSurfaceCreated 中,我重新初始化所有资源。它可以工作,但速度不快,而且会消耗大量内存。有更好的解决方案吗?
最佳答案
只要您使用的是 GLSurfaceView ,就不必担心 OpenGL 资源被删除。每次用户单击主页按钮/后退按钮时,EGL 上下文和与该上下文关联的所有资源(纹理、VBO、着色器)都将被删除。因此,您有责任在 onSurfaceCreated() 方法中创建它们。 此外,我不认为删除 onDestroy() 中的资源会起作用,因为那里没有可用的有效 EGL 上下文。
关于Android Activity 生命周期和 OpenGL ES 2.0(VBO、着色器等),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17908210/