Engine/Source/Runtime/Private/Launch.cpp externFEngineLoopGEngineLoop;int32GuardedMain(constTCHAR*CmdLine){EnginePreInit(CmdLine);//GEngineLoop.PreInit( CmdLine )EngineInit();//GEngineLoop.Init()while(!IsEngineExitRequested()){EngineTick();//GEngineLoop.Tick()}EngineExit();//GEngineLoop.Exit(...
执行引擎四大阶段的流程:EnginePreInit 、EngineInit 、EngineLoop、EngineExit 。执行流程图如下所示 EnginePreInit 引擎预初始化 实际上调用FEngineLoop::PreInit,再调用PreInitPreStartupScreen和PreInitPostStartupScreen,从而实现许多初始化和核心模块相关的事情 PreInitPreStartupScreen 里的执行流程 先进行各种初始化,如...
引擎四个大阶段:引擎预初始(EnginePreInit),引擎初始(EngineInit),引擎循环(EngineLoop),引擎退出(EngineExit)。 // 全局的引擎主循环对象FEngineLoopGEngineLoop;int32EnginePreInit(constTCHAR*CmdLine){int32ErrorLevel=GEngineLoop.PreInit(CmdLine);return(ErrorLevel);}int32EngineInit(){int32ErrorLevel=GEngineLoo...
它先会创建GEngine,然后创建GameInstance,然后创建WorldContext及UWorld,最后会创建游戏使用的viewport。 五、FEngineLoop::Tick()函数 开始帧(请求渲染线程的BeginFrame命令、更新时间以及处理最大更新率、更新FPS图表),重启延迟更新(请求渲染线程的ResetDeferredUpdates、消息泵,引擎的具体循环、Shader的异步编译处理),结束...
int32 FEngineLoop::PreInit(const TCHAR* CmdLine) 2 线程调用 渲染线程创建完成之后便可以对其进行使用了,下面以FPrimitiveSceneProxy::SetSelection_GameThread为例进行讲解,完整代码如下所示。 void FPrimitiveSceneProxy::SetSelection_GameThread(const bool bInParentSelected, const bool bInIndividuallySelected) ...
1. FEngineLoop::PreInit() { StartRenderingThread() } 1. 2. 3. 4. 5. 6. 2. StartRenderingThread() { GRenderingThreadRunnable = new FRenderingThread() GRenderingThread = FRunnableThread::Create(GRenderingThreadRunnable, ...) }
UE4Editor-Win64-Debug.exe!FEngineLoop::PreInitPreStartupScreen(const wchar_t * CmdLine) Line 2052 UE4Editor-Win64-Debug.exe!FEngineLoop::PreInit(const wchar_t * CmdLine) Line 3606 UE4Editor-Win64-Debug.exe!EnginePreInit(const wchar_t * CmdLine) ...
在一开始执行引擎初始化的时候,FEngineLoop: reInit函数会调用FEngineLoop::AppInit进行OnlineSubSystem的加载。(如果是以插件形式集成,就要通过IPluginManager:: Get()->LoadMoudlesForEnabledPlugins()来完成了) //FEngineLoop::AppInit LaunchEngineLoop.cpp ...
对于带有名字的线程,它不需要创建新的Runnable线程,因为它们会在其它的时机创建,如StatThread以及RenderingThread会在FEngineLoop.PreInit里创建。而那N个非指定名称的任意线程,则需要在一开始就手动创建Runnable线程,同时设置其优先级比前面线程的优先级要低。到这里,我们应该可以理解,有名字的线程专门要做它名字对应的...