我所理解的Cocos2d-x(二) 新的渲染系统

    如下图所示,主线程的每一帧遍历ui树的每个元素时,并不直接调用OpenGL ES进行绘制,而是将每个元素的绘制命令包装成一个RenderCommand对象发送至绘制栈,绘制栈在遍历场景中的每一个元素之后开始绘制。

    Cocos2d-x提供QuadCommand、GroupCommand、BatchCommand及自定义绘制命令的CustomCommand。


    

  上述方法优点如下。

 (1)绘制命令可以被重用

   将绘制命令从UI树的遍历中分离,多个不同的元素可以用相同的绘制命令进行组合,使得对引擎的维护更灵活。例如,Label,Particle及TileMap都使用BatchCommand进行绘制。

 (2)渲染系统进行优化

  对于相邻的绘制命令,如果他们使用相同的RenderCommand类型,并且使用相同的纹理和OpenGL ES绘制参数,渲染系统可以把他们合并成一次绘制。减少绘制次数能够提升渲染性能,在3.0中被称为自动批绘制技术(auto-batching)。

  若一个场景中有100个sprite,且来自同一纹理,那么理想情况下,只需要进行一次OpenGL ES绘制命令调用,如下图所示。

     

  (3)提升了UI树中元素绘制顺序的自由度

  绘制命令是按照UI树遍历顺序发送至绘制栈的,但绘制栈可以对其进行重新排序。UI树更多的是决定元素的坐标系变换。

  3.0通过给node引入globalZOrder来设定全局的绘制顺序。绘制栈优先根据globalZOrder中的设定进行排序,然后才是globalZOrder对所有RenderCommand进行排序,以决定绘制顺序,如下图所示。

     

 (4)自动裁剪技术

  3.0为Sprite引入了自动裁剪技术(auto-culling),所有在视窗外的sprite不会发送绘制命令到绘制栈。从而减少不必要的OpenGL ES绘制调用。

 

 

 

 

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值