UE4-001:引擎入口与主循环

UE4 Version: 4.26.2
Windows Platform
不考虑Editor相关代码

App入口

对于Windows平台,WinMain为应用程序入口;

WinMain所在的源文件为:

Engine/Source/Launch/Private/Windows/LaunchWindows.cpp

引擎C++入口

UE4支持跨平台,需要一个独立于各平台的入口函数:
GuardedMain为该入口函数,于WinMain中直接或者间接被调用;

GuardedMain函数所在的源文件为:

Engine/Source/Runtime/Private/Launch.cpp

引擎整体调用流程:

在GuardedMain函数体内,会依次调用下面几个函数:

  1. EnginePreInit();
  2. EngineInit();
  3. EngineTick(); 循环调用
  4. EngineExit();

FEngineLoop类

在Launch.cpp源码中有一个全局对象FEngineLoop GEngineLoop

class FEngineLoop所在源文件为:

Engine/Source/Runtime/Launch/Public/LaunchEngineLoop.h

引擎整体调用流程中的函数简单包装并调用GEngineLoop对象的成员函数, 如下:

int32 EnginePreInit( const TCHAR* CmdLine )
{
	int32 ErrorLevel = GEngineLoop.PreInit( CmdLine );

	return( ErrorLevel );
}

int32 EngineInit()
{
	int32 ErrorLevel = GEngineLoop.Init();

	return( ErrorLevel );
}

void EngineTick( void )
{
	GEngineLoop.Tick();
}

void EngineExit( void )
{
	// Make sure this is set
	RequestEngineExit(TEXT("EngineExit() was called"));

	GEngineLoop.Exit();
}

涉及到的源码文件路径:

  • Engine/Source/Runtime/Launch/Private/Windows/LaunchWindows.cpp
  • Engine/Source/Runtime/Launch/Private/Launch.cpp
  • Engine/Source/Runtime/Launch/Public/LaunchEngineLoop.h
  • Engine/Source/Runtime/Launch/Private/LaunchEngineLoop.cpp

拓展,可以试着去翻看一下引擎的源码,探查一下其他平台的入口函数在那个源文件中,以及代码是怎么规划的。

posted @ 2022-02-18 06:27  阿佑001  阅读(764)  评论(0编辑  收藏  举报