问题:
考虑到Android NDK r6b的hello-gl2示例,当用户反复调用GLSurfaceView的暂停/恢复动作时,此示例是否正确?我问,因为每次调用GL2JNIView.Renderer.onSurfaceChanged()时,它都会创建所有OpenGL资源(着色器,纹理),但它永远不会破坏它们。
背景:
我正在尝试调试一些使用C ++和JNI实现的OpenGL ES 2.0游戏,这些游戏在暂停/恢复期间表现不正确。我试图为此找到一些参考示例,但我没有找到任何除了NDK提到的hello2-gl示例,可能是IMHO创建内存泄漏,而this more complex version of it,我正在使用,但是在GLSurfaceView完成其onPause()方法之前看起来OpenGL上下文被破坏了,其中我正在销毁绑定到上下文的所有OpengGL着色器和纹理。您能否指点我使用NDK在Android上使用OpenGL ES 2.0的一些真正正确的例子,关于暂停/恢复OpenGL资源处理的正确方法?
感谢您的帮助。
答案 0 :(得分:2)
这不是一个正确的生命周期,但它已经接近了。每当GL表面变得完全模糊时,其EGL上下文将被销毁,并且当发生这种情况时,将释放通过OpenGL调用分配的任何资源。因此,除非您的应用程序在运行时需要主动管理(例如,在内存中缓存太多纹理等),否则无需手动释放这些资源。
请注意,这仅适用于OpenGL通过OpenGL调用分配的资源和内存。您像往常一样需要释放在OpenGL之外分配的任何缓冲区。