当前位置: BOLT界面引擎 > 知识库文章 > BOLT引擎的分层渲染机制

BOLT引擎的分层渲染机制

作者:李亚星 2013-05-30

BOLT引擎从1.6(1.7)版本起,引入了层渲染功能,层渲染功能主要依赖核心元对象LayerObject实现,并且在此基础上引入了缓存机制、剪裁敏感和整体渲染等特性

 

现在引擎的渲染方式,根据当前对象树上有没有层对象(LayerObject),分为传统渲染模式和分层渲染模式:

l  传统渲染模式

一个对象树在绘制时候,只有一个最终绘制surface (也即绘制目标位图,下同),所有元对象按照zorder由低到高的次序,绘制到目标位图

 

l  分层渲染模式

一个对象树在绘制时候,每个渲染层都有一个目标位图,所有绑定到该渲染层上的对象只能绘制到该层,而不是到最终的目标位图,整个渲染流程分成两大步骤:

n  所有层对象按照嵌套的拓扑结构,依次渲染,生成该层的目标位图

n  层对象和其它元对象,按照传统渲染模式,zorder由低到高依次绘制到最终目标位图

 

传统的渲染模式很好理解,相比之下分层渲染模式就有些复杂,在此基础上分层渲染支持很多传统渲染模式不支持的特性,极大增强了元对象的功能和适用范围,核心特性有下面几个:

l  层缓存特性

引擎里面的绘制策略是基于脏矩形+分块刷新的机制,简单来说,在一个绘制周期内,如果一个元对象内容发生改变需要刷新了,那么会产生一个或者多个脏矩形,渲染器在绘制周期结束时候,会对界面上所有的“脏”区域进行重绘操作。

在传统的绘制模式下,当界面上需要对一个区域进行重绘的时候,该区域覆盖到的所有元对象都需要参与绘制,无论某个对象在该绘制周期内有没有产生脏矩形;而引入了分层渲染模式后,一组对象可以绑定到一个层上面,如果在某个绘制周期内,该层上所有对象有没有产生脏矩形,那么在该绘制周期内进行重绘时候,该层的元对象不会被进行重绘,而是直接使用该层的缓存结果,所以提高了该层元对象的绘制效率,属于牺牲空间换时间的策略

 

l  剪裁敏感特性

这个特性可能没有那么直观,上面也有提到,引擎在绘制时候采用的是基于脏矩形和分块刷新的机制,所以在同一个绘制周期里面,一个元对象可能被要求绘制一个或者多个区域,也就是可能是部分刷新,也可能是全刷新,但是需要明确的是,一个元对象的刷新区域是随机的,即使是全刷新,也可能被分多个小区域分别进行刷新。

分块刷新机制对元对象提出了苛刻的要求,要求可渲染元对象必须支持分块刷新,并且效果和整体刷新要完全一致,可渲染元对象都应该满足这个特性,这样渲染效率也是最高的,只进行必要的刷新。但是在引擎BXF框架下,结合层渲染引入的后置渲染类型的元对象,很多时候不可以以剪裁方式绘制,因为有些类型元对象每次绘制都需要完整的绘制信息和目标位图,这种情况下就需要结合层对象的剪裁敏感特性来使用,这个详细内容参考《关于剪裁敏感的元对象》知识库文章

 

l  整体渲染特性

分层渲染模式下,如果一组元对象绑定到了同一个层对象上面,那么该组元对象就只能渲染到该层上面,并且其它元对象不可渲染到该层上,即使zorder处于该组元对象之间。层对象本身可以嵌套,对象树上可以有多级层对象,渲染时候子层对象会先于父层对象渲染。

         整体渲染特性也提供了很多方便,比如传统的整体动画,可以用绑定层对象的动画来实现;通过后置渲染对象,也可以对一个或者一组对象的渲染结果进行二次处理,来达到预期的效果

 

 

层渲染在带来强大功能的同时,也同时会带来一些负面作用:

l  由于每个层对象都需要一个缓存位图,所以内存占用会比没有层对象的时候要大,尤其是要尽量避免创建超大的层对象(LayerObject)

l  在渲染周期中,分层渲染模式也要比传统渲染模式复杂的多,开销也要大些

l  剪裁敏感的层对象,很多时候要比非剪裁敏感层对象渲染开销要大,因为该层上的任何一个对象产生了脏矩形,该层上所有元对象都需要重新完全绘制,所以粒度一定要控制好

 

一般来说,层渲染和LayerObject的使用要恰当,只在合适的时候使用LayerObject,比如

1.         需要整体渲染的时候,或者需要类似整体动画功能的时候,可以把一组元对象绑定到同一个LayerObject

2.         对于一组不经常改变状态的元对象,可以使用层对象的缓存策略,提高渲染效率(只有在非常考虑渲染效率的情况下才需要这么做)

3.         对于剪裁敏感的元对象,需要绑定到剪裁敏感的层对象上使用,否则元对象不能正常工作,这应该是层对象使用的主要场景,比如扩展对象里面的很多后置渲染元对象,就需要配合LayerObject来使用

 

 

迅雷公司 版权所有 Copyright 2003-2010 Thunder Inc.All Rights Reserved. 意见反馈:xl7doc@xunlei.com