Android活动生命周期和OpenGL ES 2.0(VBOs、着色器等)

Android活动生命周期和OpenGL ES 2.0(VBOs、着色器等),android,opengl-es,android-activity,Android,Opengl Es,Android Activity,你能描述一下我什么时候应该重新创建VBO、着色器和纹理吗?我知道OpenGL函数是在分离线程中调用的。我在活动的onResume中调用GLSurfaceView的onResume方法(与onPause方法相同)。 当GLContext丢失时? 让我们假设用户触摸home按钮。调用活动的onPause方法。我应该删除vbo、着色器和纹理吗?或者我应该在调用onDestroy时删除这些资源(恢复GL线程以删除它们?)?如果用户点击后退按钮怎么办? 这是另一个问题。我是否应该在Java中保留位图、顶点

你能描述一下我什么时候应该重新创建VBO、着色器和纹理吗?我知道OpenGL函数是在分离线程中调用的。我在活动的onResume中调用GLSurfaceView的onResume方法(与onPause方法相同)。 当GLContext丢失时? 让我们假设用户触摸home按钮。调用活动的onPause方法。我应该删除vbo、着色器和纹理吗?或者我应该在调用onDestroy时删除这些资源(恢复GL线程以删除它们?)?如果用户点击后退按钮怎么办? 这是另一个问题。我是否应该在Java中保留位图、顶点和属性以重新定义VBOs和纹理?
现在,每次调用活动的onPaused方法时,我都会删除所有着色器、VBO和纹理。我向事件队列发送一个特殊事件。在onSurfaceCreated中,我重新分配了所有资源。它工作正常,但速度不快&它消耗了大量内存。有更好的解决办法吗

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