在Android OpenGL ES中创建纹理之后,我是否必须稍后使用glDeleteTextures()来显式删除这些纹理?如果是这样,我将如何设置回调来执行此操作?我必须删除GLSurfaceView中的纹理吗?
在此先感谢
在Android OpenGL ES中创建纹理之后,我是否必须稍后使用glDeleteTextures()来显式删除这些纹理?如果是这样,我将如何设置回调来执行此操作?我必须删除GLSurfaceView中的纹理吗?
在此先感谢
不,它们会在您离开应用程序后自动删除。实际上,更大的缺陷是如果您的应用再次激活,忽略纹理ID - 当您再次调用onSurfaceChanged
时,请记住这一点。
如果您不再使用纹理,那么您应该调用glDeleteTextures()以便可以释放底层硬件资源。但是正如EboMike所说的,你必须小心使用从前一个上下文实例创建的纹理;为了扩展这个答案,我喜欢创建一个包含纹理ID的纹理类,它从finalize()方法中调用glDeleteTextures(),但是也有一个名为“contextId”的app-static int,它会每次递增创建GL上下文的时间(即在onSurfaceCreated中); texture wrangler应该在实例化时跟踪contextId的值,并且如果该值在其上更改,则意味着它应该重新加载其纹理(请记住旧纹理ID已与旧的上下文一起丢弃)。