现在的位置: 首页 > 综合 > 正文

CEGUI 0.7, 你值得拥有

2013年09月19日 ⁄ 综合 ⁄ 共 1166字 ⁄ 字号 评论关闭

         最近翻看CEGUI代码的时候发现,CEGUI 0.7在构架上比之前版本有了里程碑式的提升。

         每当需要重绘时,CEGUI都会提供给渲染器一个队列,其中包含了所有已经排序好的待渲染单位。CEGUI 0.7对这个队列进行了巨大改善。

         CEGUI 0.6及此前版本中,渲染队列的填充方式如下图:

CEGUI 0.6

1 CEGUI 0.6及以前版本渲染队列填充方式

         所有的CEGUI窗口都将本窗口中需要渲染的图片,填充到CEGUI系统的大渲染队列里。如果有一个CEGUI窗口需要更新,那么整个大队列都需要清空并被重新填充,也就是所有窗口都需要再次将自己的图片往大队列中投放一遍,这会导致帧数骤降。

         也许你会注意到上图中CEGUI Windows层和大队列层中间还有一个缓冲层RenderCache,它是CEGUI为避免窗口无意义的重复刷新所提供的一个方案,也就是说,如果一个窗口不需要刷新,它对应的RenderCache缓存就不需要改变。在实际应用中,这个方案收效并不明显。如果一个窗口包含有文字,那么这些文字中的每一个字符,都会通过字体类里的一张映射表,最终映射为一张图片,被填充到大队列里,即每次填充时都需要一个查询映射表的过程,这个查询过程并不是发生在窗口到RenderCache层之间,而是发生在RenderCache层到大队列层之间,这就意味着每次填充时的大量查询操作会再次导致帧数骤降,这使得RenderCache的效果大打折扣。实际上,CEGUI 0.7直接去掉了这一层。

         CEGUI 0.7渲染队列的填充方式如下图:

CEGUI 0.7

2 CEGUI0.7版本渲染队列填充方式

         可以看到0.7中引入了GeometryBuffer结构直接作为渲染队列的待渲单位,每个窗口对应一个GeometryBuffer,如此一来,如果窗口之间的前后次序没有发生变动,渲染队列是不需要被重新填充的。确切地说,GeometryBuffer提供了比RenderCache更好的缓冲功能,得益于这个结构,0.7的渲染队列也比前版本的渲染队列给出了更合理的填充方案。理想情况下,这种设计会使你的游戏性能获得上百帧的提升。

         值得一提的是,之前版本的CEGUI渲染队列仅提供Quad类型的渲染单位,也就是说你只能渲染四边形图元。而0.7版本的渲染队列里的GeometryBuffer,引入了Vertex顶点列表的概念,理论上你可以渲染任意多边形图元。这让实现类似《魔兽世界》里技能图标的冷却计时效果(一个形如时钟的扇形图元)变得相当容易,这种效果如果使用之前版本的CEGUI来实现,可要大费一番周折了。

         综上,如果你的项目仍在使用CEGUI 0.6,立刻开始考虑CEGUI 0.7吧!

抱歉!评论已关闭.