天天看點

Unreal Engine 4 初始化流程

自古以來所有的遊戲引擎都分為三個大階段: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的退出。

繼續閱讀