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

5 opengl textures memory-management

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

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

小智 5

来自 Android GLSurfaceView.Renderer 文档:

public abstract void onSurfaceCreated (GL10 gl, EGLConfig config)
Run Code Online (Sandbox Code Playgroud)

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


Bah*_*bar 4

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

通常,这样做的原因是为了确保程序运行时不会泄漏任何资源。假设您加载关卡,如果您在继续加载关卡时不释放所有纹理,迟早会耗尽内存。如果您在出口处进行清理,那么跟踪泄漏会更容易。