3.8.5 ui渲染合批尝试,不改引擎代码,即插即用

前提,最近业务用到了很多的滚动列表,然后美术很喜欢图文混排的方式,导致dc爆炸,所以参考了论坛各位大佬的思路,

首先感谢 @Yip 大佬写的文档,让我大概了解了渲染流程,指路文章 【v3.6.0源码解读】从Web到Native,浅谈2D渲染流程

废话不多说,先说思路,

根据我的理解,引擎每一帧都会调用walk去遍历节点树,

然后如果节点有继承渲染基类UIRenderer,就会调用fillBuffers 去各自实现的类里去渲染

基于这个事实,那我是不是可以做一些骚操作 ,正所谓不会瞎写的客户端不是好前端,
我们的问题是因为图文混排,导致渲染批次被打断,那么我只要调整下提交顺序不就可以了,

首先先将渲染函数保存出来,让引擎在原来位置的时候不渲染,

然后写个管理类,先遍历一下,生成一个二维数组,然后在这个节点渲染结束之后再统一去渲染自己的子节点,然后就做完了,就是写了两个类


image

看下效果


使用
将zindexManager放在要重排的节点


zindex 放到渲染节点上,然后设置渲染次序,数字越大,渲染越后

附上dome
dome.zip (14.2 KB)

注意事项
这玩意是基于我项目写的工具,我既不想改引擎,也不想改太多拼好的ui,
而且看我现在发布的时间,夜猫子出没,
目前只是简单的测试了一下,各位如果有需要的话,在使用的时候酌情使用悠着点,因为代码太简单了,我不知道有没有坑,如果有大佬看到了,希望不吝赐教,

1,基于3.8.5引擎,所以用到的函数被打了标记,说不准哪天引擎组一升级就用不了了
2,目前只测试了web,原生没测试,
3,没写节点移除情况,大家如果需要的话,自己根据需要改下吧

拜,睡觉

8赞

打扰666
膜拜大佬

没用啊!跟引擎开自动合图一样

很好,现在是我的了~~~