1. 程式人生 > 其它 >【UE4】虛幻引擎執行流程

【UE4】虛幻引擎執行流程

各個平臺啟動引擎的入口函式

  • 程式碼路徑:Engine\Source\Runtime\Launch\Private\

引擎入口函式 GuardedMain()

  • 程式碼路徑:Runtime/Launch/Private/Launch.cpp
  • 執行引擎四大階段的流程:EnginePreInit 、EngineInit 、EngineLoop、EngineExit 。執行流程圖如下所示

EnginePreInit 引擎預初始化

實際上呼叫 FEngineLoop::PreInit ,再呼叫 PreInitPreStartupScreenPreInitPostStartupScreen ,從而實現許多初始化和核心模組相關的事情

PreInitPreStartupScreen 裡的執行流程

  • 先進行各種初始化,如解析command引數、trace、stat(效能分析工具)、FModuleManager、IFileManager、FPlatformFileManager、各種路徑等
  • 載入CoreUObject模組,啟動FTaskGraphInterface
  • 通過LoadPreInitModules()
    • 載入 Engine、Renderer、AnimGraphRuntime 模組
    • 通過 FPlatformApplicationMisc::LoadPreInitModules()載入 D3D12RHI、D3D11RHI、OpenGLDrv等模組(根據所在平臺)
    • 載入 SlateRHIRenderer模組(非伺服器下)
    • 載入 Landscape、RenderCore 模組
    • 載入 TextureCompressor、AudioEditor、AnimationModifiers 模組
  • 通過 FEngineLoop::AppInit() 進行
    • 本地化文字
    • Init logging to disk
    • init config system
      • 通過 FConfigCacheIni::LoadGlobalIniFile 載入Engine、Game、Input 配置檔案
      • 其他配置檔案還有:Editor、EditorPerProjectUserSettings、EditorSettings、EditorKeyBindings、EditorLayout、Lightmass、Scalability、Hardware、DeviceProfiles、GameUserSettings等
    • Load "asap" plugin modules,為專案和外掛載入型別為 EarliestPossible 的模組
    • 檢查專案和外掛模組資料,是否需要編譯
    • 為專案和外掛載入型別為 PostConfigInit 的模組
    • 初始化頭顯 PreInitHMDDevice();
    • 列印初始化日誌
    • 初始化其他系統 FCoreDelegates::OnInit.Broadcast();
  • 設定遊戲主執行緒
  • 執行緒池初始化(如果支援多執行緒)
  • 非同步IO系統初始化(如果支援多執行緒)
  • 系統設定system settings和 cvar 初始化,cvar從 ini 檔案獲取,含渲染引數、解析度、視窗模式等
  • Scalability系統初始化 InitScalabilitySystem()
  • 渲染執行緒 UseRenderThread()
  • 平臺特定的初始化,如 FPlatformMisc::PlatformInit() 、FPlatformApplicationMisc::Init() 、FPlatformMemory::Init()
  • IPlatformFeaturesModule::Get()
  • 物理引擎初始化 InitGamePhys()
  • 引擎本地化初始化 InitEngineTextLocalization()
  • 開啟音訊執行緒 UseAudioThread
  • 啟動介面顯示 FPlatformSplash::Show();
  • 平臺應用程式建立 FSlateApplication::Create();伺服器模式下EKeys::Initialize()、FCoreStyle::ResetToDefault();
  • RHI 初始化 RHIInit()
  • RenderUtils初始化 RenderUtilsInit()
  • FShaderCodeLibrary::InitForRuntime()
  • FShaderPipelineCache::Initialize()
  • Shader hash cache: InitializeShaderHashCache()
  • GetRendererModule
  • InitializeShaderTypes
  • CompileGlobalShaderMap
  • CreateMoviePlayer
  • etc

PreInitPostStartupScreen 裡的執行流程

  • 播放啟動動畫 GetMoviePlayer()->SetupLoadingScreenFromIni
  • 載入PreEarlyLoadingScreen型別的專案模組
    • 通過 FPreLoadScreenManager::Get()->Initialize() 呼叫 UGameEngine::CreateGameWindow(); 建立視窗
  • Pak 檔案獲取和掛載
  • Config 檔案獲取和引數讀取
  • SlateRenderer 初始化
  • 載入 AssetRegistry 模組
  • UObject classes 註冊和初始化
  • PIEPreviewDeviceProfileSelector
  • InitDefaultMaterials
  • Initialize the texture streaming system
  • 載入核心啟動模組 LoadStartupCoreModules,包括
    • Core、Networking、Messaging
    • MRMesh、UnrealEd、EditorStyle、LandscapeEditorUtilities
    • SlateCore、Slate、SlateReflector、UMG
    • MessageLog、CollisionAnalyzer、FunctionalTesting
    • BehaviorTreeEditor、GameplayTasksEditor、StringTableEditor、VREditor、IntroTutorials、Blutility
    • Overlay、MediaAssets、ClothingSystemRuntimeNv、ClothingSystemEditor、PacketHandler、NetworkReplayStreaming
  • 通過LoadStartupModules 載入PreDefault、Default、PostDefault型別的模組
  • 載入 PreLoadingScreen 型別的模組
  • 為專案和外掛載入 PostEngineInit 型別的模組
  • Online模組
  • etc
作者:某校不良生 出處:https://www.cnblogs.com/shiroe 本系列文章為筆者整理原創,只發表在部落格園上,歡迎分享本文連結,如需轉載,請註明出處!