在调试UE4代码时往往看到SViewport、FViewport、FViewportClient、FSceneViewport这一大堆viewport相关的类会感到头晕脑涨,晕晕乎乎,仔细分析类一下,这些类其实是分为三个序列,互相之前有着千丝万缕的联系,上图先:
一、首先重点是FViewport系列,这一支源头其实是FRenderTarget,由此可知,其子孙主要从事将几何图形绘制到内存或设备上,事实也是这样。
在ue引擎中最为重要的是FSceneViewport,很明显其实就是场景绘制视口。绘制类型包括:3D和正交;绘制模式包括光照、线框等等;
二、FViewportClient这一支的源头就是FViewportClient本尊,分别在游戏模式和编辑其模式生出了UGameViewportClient和FEditorViewportClient和FLevelEditorViewportClient。这一系列其实是中介,他们负责处理视口的输入逻辑,根据输入来告诉视口(FViewport)怎么干活
需要说明的是UGameViewportClient之所以改姓(以U开头),是因为他的Baba有两个Baba,即从UObject派生了一把(应该是为了支持反射机制吧???)
三、SViewport系列,这个估计是大家最熟悉的,其实是一对的Slate空间,老祖宗都是SWidget,这个没什么好说的,
四、这三个系列虽然人丁兴旺,但是还是要接受UGameEngine的领导,随时听从UGameEngine的调度,在Runtime模式是基本都是通过CreateGameWindow、CreateGameWidget、CreateGameViewport创建的,而GameViewportWindow是主窗口,在SwitchGameWindowToUseGameViewport中才通过SWindow::SetContent方法将SViewport(这个Widget)加到窗体中
......