UE4 初始化流程

http://blog.csdn.net/flushthink/article/details/40295495


自古以來所有的遊戲引擎都分爲三個大階段:Init,Loop,Exit。UE4也不例外。

首先找到帶有入口函數的文件:Runtime/Launch/Private/XXXX/LaunchXXXX.cpp。Windows平臺就將XXXX替換成Windows。

這個文件,實現一個GuardedMainWrapper函數,顧名思義,這個函數是對GuardedMain的包裝,將GuardedMain用try\catch包裝起來。

GuardedMain位於:Runtime/Launch/Private/Launch.cpp。將整個引擎分爲了四個大階段:引擎預初始(EnginePreInit),引擎初始(EngineInit),引擎循環(EngineLoop),引擎退出(EngineExit)。

通過FEngineLoop對象的PreInit,Init,Tick,Exit來實現,參見Runtime/Launch/Private/LaunchEngineLoop.cpp。

在PreInit階段主要做了:日誌功能的啓動,線程池的啓動,加載了預初始相關的模塊,應用程序層面的初始化(ini配置的緩衝的加載,TaskGraph的啓動),RHI初始化,異步IO系統初始化,平臺特徵模塊初始化,遊戲物理的初始化,流管理初始化,Slate應用程序的創建,啓動渲染線程,加載啓動模塊。

在Init階段主要做了:引擎的對象的構造,引擎的命令行控制字處理,時間初始化,引擎的具體初始化。

在Tick節點主要做了:開始幀(請求渲染線程的BeginFrame命令、更新時間以及處理最大更新率、更新FPS圖表),重啓延遲更新(請求渲染線程的ResetDeferredUpdates、消息泵,引擎的具體循環、Shader的異步編譯處理),結束幀(請求渲染線程的EndFrame命令)。

在Exit裏主要做了:應用程序預退出(線程池的銷燬、Shader編譯管理的關閉、在線子系統的關閉、結束遊戲物理,粒子頂點工廠池釋放,運動模糊釋放,停止渲染線程,RHI退出,關閉所有的模塊,TaskGraph關閉,流管理關閉,異步IO系統關閉。

最終還會調用一個AppExit,AppExit裏主要做了:ini配置緩衝的退出,Log的退出。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章