【3.8.6 BUG】 Label设置active false再设置active true之后,drawcall增加了

  • Creator 版本:3.8.6

  • 目标平台:chrome浏览器

  • 重现方式:场景摆几个label,使用同一个bmfont字体,其中任何一个label先active false,再active true, 会创建材质实例,然后导致dc增加了
    image

  • 之前哪个版本是正常的: 3.8.3

  • 重现概率: 100%

@Knox 大佬有空看看吗? label的_flushAssembler里给renderData设置material,应该用this.getRenderMaterial(0), 而不是this.material? 我看sprite是这么设置的

我让相关人员看看吧,这块代码一开始就这样了,已建 issue:https://github.com/cocos/cocos-engine/issues/18830

有复现的demo么?我先设置active为false,在设置为true。drawcall没有发现变化?

晚点我弄一个demo吧,这个简单的弄几个label就可以复现了。看代码逻辑,那里是用材质实例,应该就是会打断合批了吧

NewProject_1.zip (47.4 KB) 运行demo,一开始dc是4,然后隐藏Root,再打开Root,dc变成了7

你这个button加事件了? 你是怎么隐藏root的?

你试试3.8.7吧,我在3.8.7里,加事件, 没有出现这个情况

要再显示出来- -

我是直接在editor里面隐藏节点的,没用按钮(一开始弄按钮是想写个脚本去隐藏显示,但是想了想还是直接在eidtor去选择Root就可以隐藏和显示了)

流程如下:



用3.8.7试试把


是了一下3.8.7的确是好了,但是我看源码,_flushAssembler那里还是用的material的,是其他哪里地方改了吗?

应该跟这里没关系,但是这个场景理论上应该是2个drawcall的,最新版本已经修复了。后续你在验证下哈