(原)UE引擎定制(自己动手写引擎)-主引擎篇-启动1

@author: 白袍小道

转载ReaderMe.

   

代码后续周放

   

为了早日实现一个专门的Small,Smal,Small 跨屏跨驱的渲染和物理小引擎,为此小道在Unreal的主引擎上浏览和观摩了一番。

   

结果图

   

先总结下Unreal 4的主引擎到渲染引擎的结构、渲染引擎的相关部分架构设计。

扫描二维码关注公众号,回复: 5794148 查看本文章

下图为启动渲染涉及的模块图

   

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

  

   

   

   

   

   

2LaunEngineLoop中管理启动过程和Tick,及其退出

PreInit

这里会调用

SlateApplication开启程序,

   

RHIInit启动,

   

创建引擎窗口: 调用SlateApplication创建

Init

构建Uengine(Game或Editor), 并启动Init ,Start等

tick

由于Unreal的想法是将

渲(RHI)、引擎程序(SlateApplication)、引擎(Iengine)分开。

RHITick,

Gengine::Tick,

EngineAPP(对应SlateApp)::Tick

Exit

退出维护,主要清理内存,及其相关监听处理。

   

二、EngineAPP

1EngineApp: 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维护了交换链的创建和呈现。

猜你喜欢

转载自www.cnblogs.com/BaiPao-XD/p/10661512.html