关于setBright的使用,内存泄露?

代码如下:
ui::Button* but = ui::Button::create(“avatar_selForm.png”,"","",ui::Widget::TextureResType::PLIST);
but->setBright(false);

disableImage参数填空,setBright(false),引擎会自动帮实现一个灰显的Button,但删除后内存并没有释放。

之后在update写了个测试


当前Button并没有addChild,然后看内存,会直线飙升。

沙发自己占了…
补充下 版本使用的是cocos2dx3.5

已确认,感谢您的反馈。

这个问题是因为Button每次创建出来的GLProgramState被cache了。导致内存一直上涨,其实是没有泄露(指针仍然让GLProgramStateCache维护着,不是野指针)

这个bug会尽快的修复。感谢您的反馈。

issue在此:https://github.com/cocos2d/cocos2d-x/issues/11511

原来如此,我去看了下源码的确有这个问题,每次都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);

Hello。这个问题已经修复了。

参考:
https://github.com/cocos2d/cocos2d-x/pull/11517

现在这个glprogram是一个内置的。

这个bug 在8.1修复了吗

auto glprogram = GLProgram::createWithFilenames(“vert.vsh”, “frag.fsh”);
auto glprogramstate = GLProgramState::getOrCreateWithGLProgram(glprogram);
_sprite->setGLProgramState(glprogramstate);

3.6版本中,这种方式依然内存泄露,不断的创建_sprite,然后给它setGLProgramState,每创建一次,内存增加一次,怎么解啊?