转载--认识迅雷界面引擎

鱼锦
2023-12-01

转载自http://xldoc.xl7.xunlei.com/0000000018/00000000180001000020.html

 Bolt界面引擎概念介绍

 
关键概念
       使用XML文件来定义UIObjTree,用Lua脚本来实现界面逻辑
       UIObject的类型包括ImageObject,TextObject,还有一些精心设计的原子类型  《引擎内置的元对象介绍》
       围绕核心概念建立了一系列辅助设施
 
基本工作原理
    
 
BOLT界面引擎这里提供了两个重要的核心概念HostWnd ,Render。Render可以把一颗构建完成的UIObjTree渲染成一张位图。而HostWnd是界面引擎核心与操作系统之间的桥梁,能把这张位图通过系统提供的API画到屏幕上,并能转化操作系统的键盘/鼠标等事件成为引擎的定义得标准输入事件(Action)。
 
这张图里还提到了我们的UI资源管理模块和XML布局文件读取与管理模块。
 
Render的基本工作原理
 
   DirtyRect(脏矩形)是驱动Render工作的核心。关于脏矩形,在很多2D游戏开发的文章里都有详细介绍。当一颗UIObjTree上的产生了脏矩形,其对应的Render在下次渲染时就会开始有动作,否则就什么也不干。Render会选取与脏矩形相交的所有UIObject,然后按这些UIObject的z-order排序(从小到大)排序 ,再按这个顺序依次调用这些UIObject的Draw方法。由于所有的UIObject都是由引擎实现的,所以这个Draw方法也是一个不可见的内部函数,Draw的实现会调用一些我们精心优化过的图形图像绘制函数,这一切就构成了Bolt界面引擎的高速渲染引擎。
 
注:虚线表示的矩形是脏矩形,那么Render只会渲染与这个区域相交的UIObject。
 
BOLT界面引擎里控件的概念
         基于UIObject和UIObjTree,开发控件就是设计一个可复用的“对象树片断”,而使用控件就是由界面引擎完成这个对象树片断如何嫁接到对象树上。
这里通过一个简单的例子演示一下这个过程
 
这样的一个MessageBox。抽象成UIObjTree
我们可以定义Button的对象树片断是:
合并以后
 
而且很明显,引入控件的概念,能把一颗复杂的UIObjTree分解成多个片断交给团队开发,而最后合成的UIObjTree依旧保持了各个节点的可访问性。
 

未来展望
 Bolt界面引擎的核心概念,是完全创新与独立的,并不依赖任何操作系统。所以BOLT界面引擎的发展方向之一是把界面引擎移植到各种各样的平台,目前最成熟稳定的平台是Windows,有工业级产品的质量。我们在Andiord平台和MacOS平台都有初步移植的版本,但我们还需要花费很多精力在合适的机会完成让这些平台的界面引擎更完美
   我们在移植到Andiord平台时发现,界面引擎要想在这些手持设备上流程运行,原有的基于CPU指令集优化的高速渲染器是不好的。一是CPU性能达不到,不够流畅,二是太耗电,这里迫切需要使用设备提供的硬件加速功能。得益于界面引擎不希望用户编写绘制代码的核心概念,我们只需要重新调整高速渲染器就可以实现硬件加速。目前我们正在尝试各种各样的支持硬件加速的框架方案:既能高效使用硬件的能力 ,又能兼顾CPU算法的灵活性。
   我们目前的主要精力都放在引擎本身的完善上,但实际上,如同HTML与Dreamweaver一样,界面引擎在设计之初就可以让布局部分由使用专业工具的专业人员完成,而不是负责编写逻辑代码的工程师。我们对我们的布局XML格式的简单优雅和可扩展性都有充分的信心,我们衷心的希望各位同行在理解认可了我们的概念后支持我们的标准,这样大家就能开发各种辅助工具,互相通用,共同改进BOLT界面引擎的工具链支持。

 类似资料: