代码如下:
ui::Button* but = ui::Button::create(“avatar_selForm.png”,"","",ui::Widget::TextureResType::PLIST);
but->setBright(false);
disableImage参数填空,setBright(false),引擎会自动帮实现一个灰显的Button,但删除后内存并没有释放。
之后在update写了个测试
当前Button并没有addChild,然后看内存,会直线飙升。
代码如下:
ui::Button* but = ui::Button::create(“avatar_selForm.png”,"","",ui::Widget::TextureResType::PLIST);
but->setBright(false);
disableImage参数填空,setBright(false),引擎会自动帮实现一个灰显的Button,但删除后内存并没有释放。
之后在update写了个测试
沙发自己占了…
补充下 版本使用的是cocos2dx3.5
已确认,感谢您的反馈。
这个问题是因为Button每次创建出来的GLProgramState被cache了。导致内存一直上涨,其实是没有泄露(指针仍然让GLProgramStateCache维护着,不是野指针)
这个bug会尽快的修复。感谢您的反馈。
原来如此,我去看了下源码的确有这个问题,每次都new了一个新的program。我自己也用到了类似的功能,也有这个问题,我临时这么改了下
auto pGLProgram = GLProgramCache::getInstance()->getGLProgram(ProgramName);
if (!pGLProgram)
{
pGLProgram = GLProgram::createWithByteArrays(vert, frag);
GLProgramCache::getInstance()->addGLProgram(pGLProgram, ProgramName);
}
pSprite->setGLProgram(pGLProgram);
auto pState = GLProgramState::getOrCreateWithGLProgram(pGLProgram);
这个bug 在8.1修复了吗
auto glprogram = GLProgram::createWithFilenames(“vert.vsh”, “frag.fsh”);
auto glprogramstate = GLProgramState::getOrCreateWithGLProgram(glprogram);
_sprite->setGLProgramState(glprogramstate);
3.6版本中,这种方式依然内存泄露,不断的创建_sprite,然后给它setGLProgramState,每创建一次,内存增加一次,怎么解啊?