2013-07-28 72 views
1

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

回答

1

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