UnrealEngine4初始化流程
自古以来全部的游戏引擎都分为三个大阶段: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的退出。
UnrealEngine4初始化流程的更多相关文章
- spring自动扫描、DispatcherServlet初始化流程、spring控制器Controller 过程剖析
spring自动扫描1.自动扫描解析器ComponentScanBeanDefinitionParser,从doScan开始扫描解析指定包路径下的类注解信息并注册到工厂容器中. 2.进入后findCa ...
- 【开源】OSharp3.3框架解说系列(7.1):初始化流程概述
OSharp是什么? OSharp是个快速开发框架,但不是一个大而全的包罗万象的框架,严格的说,OSharp中什么都没有实现.与其他大而全的框架最大的不同点,就是OSharp只做抽象封装,不做实现.依 ...
- SpringMVC源码剖析(三)- DispatcherServlet的初始化流程
在我们第一次学Servlet编程,学Java Web的时候,还没有那么多框架.我们开发一个简单的功能要做的事情很简单,就是继承HttpServlet,根据需要重写一下doGet,doPost方法,跳转 ...
- u-boot中nandflash初始化流程分析(转)
u-boot中nandflash初始化流程分析(转) 原文地址http://zhuairlunjj.blog.163.com/blog/static/80050945201092011249136/ ...
- Z-stack之OSAL初始化流程
转自点击打开链接 我使用的协议栈版本及例子信息: ZigBee2006\Texas Instruments\ZStack-1.4.3-1.2.1\Projects\zstack\Samples\Sam ...
- Raid1源代码分析--初始化流程
初始化流程代码量比较少,也比较简单.主要是run函数.(我阅读的代码的linux内核版本是2.6.32.61) 四.初始化流程分析 run函数顾名思义,很简单这就是在RAID1开始运行时调用,进行一些 ...
- main之前初始化流程
main之前初始化流程 本文分别介绍Keil调用的ARMCC以及ARM-NONE-EABI-GCC两个编译器在main之前的操作: Keil MDK启动文件 总结一下MDK的启动流程: 1.系统初始化 ...
- VxWorks各部分初始化流程
一)configAll.h中定义所有定置系统配置的宏 INCLUDED SOFTWARE FACILITIES:定义了基本组件: EXCLUDED FACILITIES:定义了扩充组件,缺省不包括: ...
- 关于Flutter初始化流程,我必须告诉你的是...
1. 引言 最近在做性能优化的时候发现,在混合栈开发中,第一次启动Flutter页面的耗时总会是第二次启动Flutter页面耗时的两倍左右,这样给人感觉很不好.分析发现第一次启动Flutter页面会做 ...
随机推荐
- 数据挖掘算法之-关联规则挖掘(Association Rule)(购物篮分析)
在各种数据挖掘算法中,关联规则挖掘算是比較重要的一种,尤其是受购物篮分析的影响,关联规则被应用到非常多实际业务中,本文对关联规则挖掘做一个小的总结. 首先,和聚类算法一样,关联规则挖掘属于无监督学习方 ...
- iOS CoreImage图片处理动态渲染(滤镜)
// // ViewController.m // CoreImageOfDong // // Created by Dong on 15/6/30. // Copyright (c) 201 ...
- ROS-Rviz-turtlebot3仿真信息查看
前言:Rviz是ROS自带的一种3D可视化工具. 一.安装turtlebot3功能包 1.1 安装依赖包 sudo apt-get install ros-kinetic-joy ros-kineti ...
- Spark RDD概念学习系列之RDD的五大特征
不多说,直接上干货! RDD的五大特征 分区--- partitions 依赖--- dependencies() 计算函数--- computer(p,context) 分区策略(Pair RDD) ...
- Tomcat转jboss踩的那些坑
问题背景 今天发版本,是一个httpclient的跳转(由于公司网络原因,所以对外网的访问都经过这个代理服务出去). 问题原因 之前的开发一直在window系统的tomcat服务器上进行的,对jbos ...
- 转:Hibernate使用SQLQuery
原文:http://hi.baidu.com/luo_qing_long/blog/item/783a15eceb75abdd2f2e21b0.html 对原生SQL查询执行的控制是通过SQLQuer ...
- 【原创】java的反射机制
什么是java的反射?java在运行期间可以动态的加载.解析和使用一些在编译阶段并不确定的类型,这一机制被称作反射.它可以加载只有运行时才能确定的数据类型,解析类的内部结构,获取其基本信息,如方法.属 ...
- Unity 设置2台摄像机的叠加
如果Camera1和Camera2拍摄的物体各自在摄像机视野内,如果在同一个屏幕上把2件物体都显示出来? 1,Camera1的Depth设置为-1 2,Camera2的Depth设置为0,同时Clea ...
- Django路由中的include
include(module,namespace = None,app_name = None)[source] include(pattern_list) include((pattern_list ...
- data is not None
在读django的form源码: def __init__(self, data=None, files=None, auto_id='id_%s', prefix=None, initial=Non ...