В Cocos2d, как освободить текстуру из памяти OpenGL (GPU)? - PullRequest
1 голос
/ 07 января 2012
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 ]

3 голосов
/ 08 января 2012

На большинство вопросов можно ответить, используя правильный инструмент.В этом случае stackoverflow не является инструментом. Instruments is .

Вы также можете подойти к этому с помощью вулканской логики.Этот кусок кода используется тысячами разработчиков по всему миру.Вероятность того, что этот код вызовет утечку памяти, должна рассматриваться как бесконечно малая для библиотеки программного обеспечения, существующей более 3 лет.

1 голос
/ 31 марта 2013

Я получил решение, один из этих вызовов удаляет текстуру из CCTextureCache, и это удаляет текстуру OpenGL (glGenTextures id).

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

OR

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

OR

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