2

你能描述一下我什么时候应该重新创建 vbo、着色器、纹理吗?我知道 OpenGL 函数是在单独的线程中调用的。我在Activity的onResume中调用GLSurfaceView的onResume方法(和onPause方法一样)。当 GLContext 丢失时?让我们假设用户触摸主页按钮。Activity 的 onPause 方法被调用。我应该删除 vbo、着色器、纹理吗?或者我应该在调用 onDestroy 时删除这些资源(恢复 GL 线程以删除它们?)?如果用户触摸返回按钮怎么办?另一个问题。我应该在 Java 中保留位图、顶点属性以重新初始化 VBO、纹理吗?现在,每次调用 Activity 的 onPaused 方法时,我都会删除所有着色器、vbos 和纹理。我将一个特殊事件发送到事件队列。在 onSurfaceCreated 我重新初始化所有资源。它正在工作,但速度不快& 它消耗大量内存。有更好的解决方案吗?

4

1 回答 1

1

只要您使用 GLSurfaceView ,就不用担心删除 OpenGL 资源。每次用户单击主页按钮/返回按钮时,EGL 上下文和与该上下文相关的所有资源(纹理、VBO、着色器)都将被删除。因此,您有责任在 onSurfaceCreated() 方法中创建它们。此外,我认为删除 onDestroy() 中的资源不会起作用,因为那里不会有有效的 EGL 上下文可用。

于 2013-09-26T07:42:27.880 回答