在Cocos2d中,如何从OpenGL内存(GPU)中释放纹理?

时间:2012-01-07 17:05:38

标签: opengl-es cocos2d-iphone

CCSprite *sprite;
sprite.texture = [[CCTextureCache sharedTextureCache] addImage: @"mySpriteImage.png"];
sprite.position = ccp(width/2.0f, height/2.0f);
[self addChild:sprite z:2 tag:kTagMySprite];

...

[sprite removeFromParentAndCleanup:YES];

上面的代码中是否有内存泄漏?是否发布了OpenGL纹理,还是需要从缓存中释放?

2 个答案:

答案 0 :(得分:3)

使用正确的工具可以回答大多数问题。在这种情况下,stackoverflow不是工具。 Instruments is

您也可以使用Vulcan逻辑来解决此问题。这段代码正被全球数千名开发人员使用。对于已存在超过3年的软件库,此代码导致内存泄漏的概率必须考虑infinitesimal

答案 1 :(得分:1)

我得到了解决方案,其中一个调用从CCTextureCache删除纹理并删除了OpenGL纹理(glGenTextures id)。

[[CCTextureCache sharedTextureCache] removeTexture:sprite3.texture];

OR

[[CCTextureCache sharedTextureCache] removeTextureForKey:@"ImageName.png"];

OR

[[CCTextureCache sharedTextureCache] removeTexture:[(CCSprite*)[self getChildByTag:kTagBackground] texture] ];