@author: 白袍小道
转载ReaderMe.
代码后续周放
为了早日实现一个专门的Small,Smal,Small 跨屏跨驱的渲染和物理小引擎,为此小道在Unreal的主引擎上浏览和观摩了一番。
结果图
先总结下Unreal 4的主引擎到渲染引擎的结构、渲染引擎的相关部分架构设计。
![](/qrcode.jpg)
下图为启动渲染涉及的模块图
Core模块 |
这个模块主要放一些底层库 |
Launch |
启动部分 |
RHI |
渲染底层的抽象层 |
SlateApplication |
引擎程序 |
SlateRender |
引擎程序(窗口的渲染等) |
WindowsRHI |
这里会放入DX相关的封装 |
Engine |
这里放入主引擎及其相关 |
一、Launch部分
主要的脉络为:
1、不同平台的入口函数,
进入到Launch.cpp ,然后启动LaunchEngineLoop。
1.1 这里通过外部函数实现来进入到主的Launch.
extern int32 GuardedMain(HINSTANCE hInInstance, HINSTANCE hPrevInstance, int32 nCmdShow);
1.2 Launch.cpp:
这里有个GEngineLoop (全局)
EngineLoopCleanupGuard |
监视错误码(等待退出 |
EnginePreInit |
|
EngineInit |
|
EngineExit |
|
2、LaunEngineLoop中管理启动过程和Tick,及其退出
PreInit |
这里会调用 SlateApplication开启程序,
RHIInit启动,
创建引擎窗口: 调用SlateApplication创建 |
Init |
构建Uengine(Game或Editor), 并启动Init ,Start等 |
tick |
由于Unreal的想法是将 渲(RHI)、引擎程序(SlateApplication)、引擎(Iengine)分开。 RHITick, Gengine::Tick, EngineAPP(对应SlateApp)::Tick。 |
Exit |
退出维护,主要清理内存,及其相关监听处理。 |
二、EngineAPP
1、EngineApp: SlateApplication
这部分主要包含App,Window,Unreal将其抽象为SlateAPP,EngineWindows.SlateRHIRender
SlateAPP |
引擎程序,这里包含程序创建,窗口制作等分装 |
EngineWindows |
一个最顶的窗口封装,其中包含了NativeWindow(一个GenWindow,Gwindow由可以不同不同实现) |
SlateRHIRender |
程序渲染部分,注意和RHI(DynamicRHI)区别。就是一个程序自身的绘制管理。(而程序窗口中的绘制,不同平台各自实现) |
1.1、EngineWindow(SWindow)
其中DZWindow分化出不同平台或者定制的Window
1.2、SlateRHI
其中我们回忆一下DX的CreateD3DDevice或者CreateDeviceAndSwap,是需要一个HWD对吧,这里OSWindow就出来了,它是在创建窗口后确定的。
到此为止我们的窗口就有了。。。。。下一部分是SlateRHI、Swindow\ ViewPort和DXRHI部分(这里需要维护了ViewPort,而ViewPort维护了交换链的创建和呈现。