在Android OpenGL ES中创建纹理后,我是否必须使用glDeleteTextures()显式删除这些纹理?如果是这样,我将如何设置回调来执行此操作?
提前致谢
答案 0 :(得分:4)
如果你不再使用纹理,那么你应该调用glDeleteTextures(),以便释放底层硬件资源。
但正如EboMike所说,你必须小心使用从前一个上下文实例创建的纹理;为了扩展这个答案,我喜欢创建一个纹理争用类来包装纹理的ID,并从其finalize()方法调用glDeleteTextures(),但是还有一个名为“contextId”的app-static int,它每个都会增加创建GL上下文的时间(即在onSurfaceCreated中);纹理调换器应该在实例化时跟踪contextId的值,如果值在其上发生变化,则意味着它应该重新加载其纹理(请记住,旧的纹理ID已经与旧的上下文一起丢弃)。
答案 1 :(得分:2)
不,一旦您离开您的应用,它们会自动删除。实际上更大的缺陷是如果您的应用再次变为活动状态则忽略纹理ID - 在再次调用onSurfaceChanged
时请记住这一点。