安卓NDK示例hello-gl2中的暂停/恢复功能是否正确?

3

问题:

考虑来自Android NDK r6b的hello-gl2示例,当用户重复调用GLSurfaceView的暂停/恢复操作时,这个示例是正确的吗?我问这个问题是因为每次调用GL2JNIView.Renderer.onSurfaceChanged()时,它都会创建所有OpenGL资源(着色器、纹理),但它从不销毁它们。

背景:

我正在尝试调试一些使用C ++和JNI实现的OpenGL ES 2.0游戏,在暂停/恢复期间行为不正确。我试图找到一些参考示例,但除了NDK中提到的hello2-gl示例之外,我还没有发现任何参考资料,但这可能会在我的看法中创建内存泄漏,并且这更复杂的版本,我目前正在使用这个链接,但在其中似乎OpenGL上下文被销毁,然后GLSurfaceView完成了它的onPause()方法,在那里我正在销毁绑定到上下文的所有OpengGL着色器和纹理。您能否指向一个真正正确的OpenGL ES 2.0在Android上使用NDK的示例,关于处理暂停/恢复OpenGL资源的正确方式?

感谢您的帮助。

1个回答

2

这并不完全是正确的生命周期,但它很接近。任何时候一个GL表面变得完全被遮挡,它的EGL上下文将被销毁,当发生这种情况时,你通过OpenGL调用分配的任何资源都将被释放。因此,除非你的应用程序需要在运行时进行主动管理(例如,内存中缓存太多纹理等),否则没有必要手动释放这些资源。

请注意,这仅适用于由OpenGL通过OpenGL调用分配的资源和内存。任何在OpenGL之外分配的缓冲区都需要像往常一样进行释放。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接