cocos2dx 关于渲染的学习

exe运行起来的时候,在左下角会有三个参数,glcall指的是当前场景的渲染批次(即渲染次数),这个次数越多,界面会越卡。据前辈说:一般超过130,界面会变的开始卡顿。当时写界面的时候,这个值达到了250,界面刷新的时候会明显的顿一下,所以学习了下关于cocos2dx渲染的机制,从而降到了120,下面讲一下关于对渲染机制的理解。

 

cocos2dx 的分批次渲染机制,可以理解为:准备-渲染-渲染-渲染-……-清除,可以理解为是一个画笔,准备阶段包括,调色,着色等等多个阶段(这边没有深入学习过),然后渲染阶段就是“画笔”画出界面的过程,清除就是把“画笔”清色。

只有在同一纹理,同一着色器,同一混合函数,这三个全部满足的情况下才不会打断一个渲染批次。

对于上述的三种情况,还没有进行深入的研究。简单的理解为同一图集,同种颜色。如果渲染N个node,node所用的图全部来源于同一图集,或者node的颜色都为同一种颜色,则可以由1次渲染全部完成,否则则需要多个批次,批次和批次之间 就会存在清除和重新准备的阶段,所以批次越多,渲染所花费的时间就越长。

项目中的问题为,界面存在40个节点(假设),每个节点包含3个子节点(1个img,2个text)。N个节点的背景都在A图集中,所有子节点img的图片都在B图集中,子节点text分为两种颜色,如果

for allNode do

渲染背景,

创建img子节点,渲染子节点图片,

创建颜色1字体,渲染,

创建颜色2字体,渲染

end

如上面伪代码所示,一个节点一个节点渲染过来,先渲染节点的背景,此时打断批次,渲染子节点img,又是一个渲染批次,接着渲染颜色1字体,又打断,渲染颜色2字体,这样对于1个节点渲染批次就变成了4次,40个则为 40*4 = 160。

如果

for allNode do

渲染背景

end

 

for allNode do

创建img节点,渲染

end

 

for allNode do

创建颜色1字体,渲染

end

 

for allNode do

创建颜色2字体,渲染

end

如上面伪代码所示,先用一个循环,先把所有节点的背景渲染完,再用一个循环,把所有子节点img的图片渲染完,再用一个循环,把颜色1的text渲染完,再用一个循环,把颜色2的text渲染完,则渲染批次次数为4次,修改渲染顺序后,渲染的效率得到了很大的提高。

 

以上为对于cocos2dx渲染批次的理解,欢迎其他大佬一起交流学习。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值