我怎么知道GLSurfaceView何时会破坏OpenGL上下文?

时间:2017-07-05 00:05:17

标签: android opengl-es opengl-es-2.0 glsurfaceview egl

有没有办法知道android.opengl.GLSurfaceView类实例何时要破坏它的OpenGL上下文,以便我可以以受控方式删除我的OpenGL资源(着色器,纹理等)?我尝试在函数GLSurfaceView.EGLContextFactory.destroyContext()GLSurfaceView.EGLWindowSurfaceFactory.destroySurface()中的第一行代码中删除它们,但这两者似乎都没有用,因为我在logcat中都收到了这个警告:

I/com.mydomain.myapp: WindowSurfaceFactory.destroySurface begins
E/libEGL: call to OpenGL ES API with no current context (logged once per thread)
I/com.mydomain.myapp: WindowSurfaceFactory.destroySurface ends

因此,删除OpenGL资源似乎已经太晚了,因为上下文似乎已经被破坏了。

我无法使用Activity.onStop(),因为它是从错误的线程调用的。

我想我也可以忘记OpenGL资源,只需在应用程序恢复时重新创建它们,但我必须更改我的代码,因为我已经使用了很多包装类(在C ++中)围绕OpenGL资源,在构造函数中创建资源并在析构函数中销毁它,因此没有快速的方法告诉他们忘记资源。如果我忘记这些资源,我能相信它不会导致内存泄漏吗?

0 个答案:

没有答案