我必须在程序的最后使用glDeleteTextures()吗?

时间:2010-01-09 17:46:56

标签: opengl memory-management textures

在一些示例代码中看到了,但我从未使用它,除非我动态地打开新的不同大小的纹理等。

当我的应用程序终止时,我的操作系统或其他什么可以解决纹理内存的问题?或者我必须自己释放它?

2 个答案:

答案 0 :(得分:4)

与其他所有资源一样,如果不这样做,大多数操作系统都会释放它们。

通常,这样做的原因是确保在程序运行时不泄漏任何资源。比如你加载等级,如果你不加速所有的纹理,因为你继续加载等级,迟早你会耗尽内存。如果您在退出时清理,则更容易跟踪泄漏。

答案 1 :(得分:4)

来自Android GLSurfaceView.Renderer文档:

public abstract void onSurfaceCreated (GL10 gl, EGLConfig config)

自:API Level 3 在创建或重新创建曲面时调用。 在渲染线程启动时以及每当EGL上下文丢失时调用。当Android设备在进入睡眠状态后唤醒时,EGL上下文通常会丢失。 由于此方法在渲染开始时调用,以及每次丢失EGL上下文时,此方法都是放置代码以创建在渲染开始时需要创建的资源的方便位置,并且需要重新创建当EGL上下文丢失时。纹理是您可能希望在此处创建的资源的示例。 请注意,当EGL上下文丢失时,将自动删除与该上下文关联的所有OpenGL资源。您无需调用相应的“glDelete”方法(如glDeleteTextures)来手动删除这些丢失的资源。