纯手绘的MyGUI创建Widget流程图

67 篇文章 1 订阅
4 篇文章 0 订阅

在上一篇《纯手绘的MyGUI类图、渲染流程图》文中,我大概走通了MyGUI的渲染流程,知道所有渲染动作都发生在BaseManager.drawOneFrame()里面,起点是ISubWidget,它生成顶点数据到VertexBuffer,经过LayerManager旗下的层层转发,最终喂入IDirect3DDevice9.DrawPrimitive()。可是MyGUI系统内的另一个非常重要的对象Widget,虽然也是和SubWidget同样挂职在LayerNode旗下,初看上去却似乎是孤立于渲染流程之外,还没看到Widget和SubWidget两者的逻辑联系(把SubWidget理解为Child Widget显然是错误的。) 我(liigo)手工绘制的下面两幅草图,基本上打通了Widget和SubWidget相互之间连络的任督二脉。


Widget.createWidget, SkinItem._createSkinItem, LayerItem.attchToLayerItemNode:




Widget继承自SkinItem,SkinItem又继承自LayerItem,所以,Widget IS-A SkinItem,并且 IS-A LayerItem。

图中所示的所有动作都发生在Widget.createWidget()内部。其中兵分两路:一路加载皮肤资源XML、创建ISubWidgets并记录在Widget对象内部;一路将Root Widgets附体到用户指定的Layer(为每个Root Widget(窗口)单独创建一个LayerNode,将来Child Widgets则附体至该LayerNode)、依据先前创建的ISubWidgets生成DrawItem(to RenderItem)并附体至LayerNode。ISubWidget是Widget内负责渲染的子部门,从这个意义上说,其中的“Sub”也有道理。


以上内容为草记,主要便于自己理解。目前理解的层次有限,暂不奢求对外人有多少帮助。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值