提供下简单demo,我们会帮忙排查下~
~~我已经拆开了。。。。
合并后未能减少 drawcall,是因为你的渲染顺序被打断了。
这种情况下,引擎会尝试动态合批,不过如果图片太大,默认限制是不能超过 512,引擎会放弃动态合批。参见 https://docs.cocos.com/creator/manual/zh/advanced-topics/dynamic-atlas.html
大佬帮忙看看吧~
大佬帮忙看下 demo 吧~
顶阿顶
大佬帮忙看下 demo 吧 ,
引擎自身也会占用 drawcall 的。你应该是把节点去掉看看空场景 drawcall 是不是 2
并不是。。。空场景是1~
顶阿阿
顶阿阿
1.示例的批次为3是正常的
这里的三次绘制分别是:**1.**头像底框 **2.**BMFont文本 **3.**Profile信息。因为文本绘制的时候BlendFunc是用的SRC_ALPHA, 头像框用的是ONE,两次绘制的Blend State不一致。如果想要合批,你需要修改一下文本使用的材质里effect记录的BlendFunc为ONE,或者修改图片的Blend为SRC_ALPHA。文本的BlendFunc修改代码参考如下:
let material = this.label.sharedMaterials[0]
let passes = material._effect.getDefaultTechnique().passes;
for (let j = 0; j < passes.length; j++) {
let pass = passes[j];
pass.setBlend(
true,
cc.gfx.BLEND_FUNC_ADD,
cc.gfx.BLEND_ONE, cc.gfx.BLEND_ONE_MINUS_SRC_ALPHA,
cc.gfx.BLEND_FUNC_ADD,
cc.gfx.BLEND_ONE, cc.gfx.BLEND_ONE_MINUS_SRC_ALPHA
);
}
material.setDirty(true);
2. 动态合图的说明
这里你的图集尺寸是19211734,BMFont尺寸是258464,如果不使用AutoAtlas合图,引擎的动态图集尺寸最大是2048*2048,可合并的碎图限制的最大尺寸是512。并且需要保证图片的预乘,Wrap, Filter等信息与动态图集一致才能够动态合批。
3. 引擎层面的修改
目前引擎层面的BMFont在满足动态合图需求时没有再次进行动态合图,比如你示例中,如果不使用AutoAtlas, 文本节点“1234”,后面再添加一个使用BITMAP模式的系统文本节点,drawcall还会是4,这种情况引擎层面做了修改,可以参考:
https://github.com/cocos-creator/engine/pull/5196
修改之后,BMFont可以跟使用BITMAP模式的系统文本及其他满足需求的碎图进行动态合图。(注意:示例中的BMFont图片需要取消预乘选项的勾选,保证Texture的参数一致)
60RMB支付了吗
60rmb 支付了吗 mark
还没有 ,主要是我还没搞定。。。
哈哈,引擎问题无偿服务,用户是我们的上帝