(版权声明,禁止转载)
Slate是一种完全自定义的、平台无关的用户界面架构,其设计目的是使得构建工具及应用程序(比如虚幻编辑器)的用户界面或者应用中的用户界面变得更加有趣、高效。它结合了一种可以轻松设计、布局及风格化组件的声明式语法,使得可以轻松地创建用户界面并进行迭代开发
【<1>Slate如何设计和表示Widget的父子层级关系】
--所有的Widget都继承自SWidget
--根据是否持有子Widget分为3类
----SLeafWidget没有子Widget
----SCompoundWidget有1个子Widget
----SPanel有多个子Widget
通过Slot的方式实现层级设计
---通过FSimpleSlot和TPanelChildren<FSlot>可以方便实现持有一个和多个子Widget
---Slot(水槽)的概念如下图,一个Slot对应一个Child Widget
【<2>Slate如何高效的布局多个层级上的多个Widget】
---逐一分析SOverlay、SBoxPanel、SSplitter
----Overlay翻译过来是 覆盖,含义可以理解为 层
----Panel翻译过来是 面板,可以理解为一个 矩形区域
----Split翻译过来是 分割,Splitter翻译过来是 分割器
【<3>Slate如何渲染多个层级上的多个Widget】
---看到下面的虚幻编辑器初始布局
----上面整个布局的层级结构实际上都组织在一个SWindow里面
----如下图所示,WindowOverlay里有多个Slot,简化后
-----Slot[0]里面是一个背景SImage
-----Slot[1]里面是MainWindowArea,就是背景SImage上面的各种布局内容
---在只渲染背景SImage的时候如下
----浅析一下整个虚幻Slate编辑器只渲染一个背景SImage时的流程
---在渲染多个Widget时候的图集TextureAtlas
----FSlateTextureAtlas通过一个
深度优先遍历(DFS)的二叉树(depth-first-search binary tree)管理图集里的texture
【Previously, slots were stored as a binary tree - this has been replaced with a linked-list of slots on the edge of the tree
(slots on the edge of the tree represent empty slots); this iterates empty slots in same order as a binary depth-first-search(DFS),except much faster.】
----FSlateTextureAtlas通过一个链表TLinkedList来实现并替代DFS二叉树,提高了速度
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
【OGRE Unity UE4】引擎市场格局
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
【<4>Slate如何处理多个层级上多个Widget的事件】
----以MouseMoveEvent为例,详述一下Event的处理过程
----Event产生后
如果有多个SWindow,首先确定是哪个SWindow来处理
然后在确定的SWindow里,寻找需要响应Event的WidgetPath
在Event开始寻找SWidget之前
SWindow的所有子SWidget需要通过
一个高效的FHittestGrid进行组织管理
【<5>虚幻Slate编辑器布局分解】
---菜单栏MenuBar和下面的整个Area组成了SLevelEditor
---菜单栏MenuBarWidget和下面的AreaWidget作为子Widget按照垂直排列在SVerticalBox内
---AreaWidget一分为二
----内部按照水平排列SHorizontalBox排列两个子AreaWidget
---AreaWidget1和AreaWidget2各自按照垂直排列SVerticalBox排列子Widget
【C++基本功】
不久前有机会面试一个显卡大厂的D3D Driver Develop职位
技术部分的面试分为两个部分: 【3D Pipeline】和【C++】
---【3D Pipeline】部分聊下来感觉勉强在线,除了一些Pipeline特性没怎么用答的不理想
---【C++】部分几乎全线崩盘,简直像经历了一场灾难,从没因为C++感觉那么狼狈过...
面试前还一直自以为C++学的还不错...
结束后又想了想那些问题,除了一小部分是由于紧张想的太复杂
大部分还是因为平时没有意识到的一些知识点导致C++基本功太差
以后每篇结尾会加强一两个C++知识点
<1> C++进程内存分区
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
友情链接:
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~