我是否必须在GLSurfaceView中删除纹理?

时间:2010-11-25 00:29:48

标签: android memory textures

在Android OpenGL ES中创建纹理后,我是否必须使用glDeleteTextures()显式删除这些纹理?如果是这样,我将如何设置回调来执行此操作?

提前致谢

2 个答案:

答案 0 :(得分:4)

如果你不再使用纹理,那么你应该调用glDeleteTextures(),以便释放底层硬件资源。

但正如EboMike所说,你必须小心使用从前一个上下文实例创建的纹理;为了扩展这个答案,我喜欢创建一个纹理争用类来包装纹理的ID,并从其finalize()方法调用glDeleteTextures(),但是还有一个名为“contextId”的app-static int,它每个都会增加创建GL上下文的时间(即在onSurfaceCreated中);纹理调换器应该在实例化时跟踪contextId的值,如果值在其上发生变化,则意味着它应该重新加载其纹理(请记住,旧的纹理ID已经与旧的上下文一起丢弃)。

答案 1 :(得分:2)

不,一旦您离开您的应用,它们会自动删除。实际上更大的缺陷是如果您的应用再次变为活动状态则忽略纹理ID - 在再次调用onSurfaceChanged时请记住这一点。