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

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


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

  上述方法优点如下。

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

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

 (2)渲染系统进行优化

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

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

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

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

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

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

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

 (4)自动裁剪技术

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

 

 

 

 

相关文章:

  • 2021-08-22
  • 2022-02-14
  • 2021-08-23
  • 2021-08-23
  • 2022-03-11
  • 2022-01-11
  • 2022-12-23
  • 2021-07-31
猜你喜欢
  • 2021-05-17
  • 2021-10-20
  • 2021-09-10
  • 2021-08-17
  • 2022-12-23
  • 2021-12-10
相关资源
相似解决方案