UE4版本:4.24.3源码编译;

Windows10 + VS开发环境

Slate为一套自定义UI框架,其绘制直接依赖的是OpenGL、DirectX这样的硬件加速AIP;
可以理解为一个单独的2D图形渲染引擎,如果有其他开源2D引擎(比如Cocos2d-x)的基础会更好的理解Slate;

UE4引擎的源代码以模块的方式组织,最直观的感受是查看源码目录:Engine/Source/Runtime目录中,每个子目录都是一个模块;

抛开所有的细节,UE4作为一个GUI App,总会有个一般的启动流程和App Tick(Loop),这里记录一下该最外层的对象结构;

1、App入口:

源码Engine/Source/Runtime/Launch为启动模块;

定义在Engine/Source/Runtime/Launch/Private/Launch.cpp中的GuardedMain(...)函数是UE4的统一[入口函数];

真正的平台相关的入口函数在各平台对应的源码文件中定义,比如Windows平台下会有:
Engine/Source/Runtime/Launch/Private/Windows/LaunchWindows.cpp中定义的WinMain(...)函数,

2、运行时调用流程

查看Engine/Source/Runtime/Launch/Private/Launch.cpp中的GuardedMain(...)函数,内部依次调用:

EnginePreInit(...) ---> EngineInit() ---> 循环调用EngineTick() ---> EngineExit()

上面每个函数内部调用的是GEngineLoop这个对象的对应函数
详情可以查看Engine/Source/Runtime/Launch/Public/LaunchEngineLoop.h/Engine/Source/Runtime/Launch/Public/LaunchEngineLoop.cpp对应的源码;

3、总结:

1、以上的App入口和运行时调用流程,只是一般意义上,或者说概念上的;UE4 C++源码中有很多的全局对象,每个全局对象的构造时机都是比Main函数要早的;

2、iOS、Android移动平台的App生命周模型下,不会调用上面说的入口函数GuardedMain(...);而是基于生命周期接口中调用GEngineLoop对象的对应函数;详细的可以参看Engine\Source\Runtime\Launch\Private\IOS\LaunchIOS.cpp、Engine\Source\Runtime\Launch\Private\Android\LaunchAndroid.cpp对应的源代码;

UE4 Runtime源代码量巨大,加上源码中间夹杂个各种宏定义、Editor相关的代码,查看源码过程中容易淹没的细节中;

可取的源码阅读方式应该是先了解清楚大体流程,然后每个模块单独分析;配合全局搜索、调用堆栈等方式了解各自模块的运行机制;

了解App运行时流程后,接下来可以去了解Slate模块内部的一些功能实现机制

UE4之Slate: App启动与最外层Runtime结构的更多相关文章

  1. UE4之Slate:App默认窗口的创建流程

    UE4版本:4.24.3源码编译 Windows10 + VS2019开发环境 在先前分享的基础上,现在来梳理下App启动时默认窗口的创建流程,以及相关的类.对象之间的抽象层级: 纯C++工程配置 S ...

  2. 一触即发 App启动优化最佳实践

    一触即发 App启动优化最佳实践 本文在 DiyCode 和 CSDN个人博客 同时首发,关注作者的 DiyCode帐号 或者 作者微博 可第一时间收到新文章推送. 文中的很多图都是Google性能优 ...

  3. iOS开发app启动原理及视图和控制器的函数调用顺序

    main()函数是整个程序的入口,在程序启动之前,系统会调用exec()函数.在Unix中exec和system的不同在于,system是用shell来调用程序,相当于fork+exec+waitpi ...

  4. IOS (APP 启动 相应处理)

    APP 每次启动的入口都是通过: - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSD ...

  5. vue隐藏APP启动时显示的{{}}

    vue隐藏APP启动时显示的{{}} vue组件在编译好之前会显示{{msg}},在官网上找到这个

  6. [FMX] Android APP 启动黑屏优化补丁

    使用说明 *************************************************** Android APP 启动黑屏优化补丁 作者: Swish, YangYxd 201 ...

  7. app启动调用的api

    (8)在app启动时,调用一个初始化api获取必要的信息 通过这个初始化api,获取一下必要的信息,例如,最新的app版本.当发现本地app的版本已经低于最新的app版本,可提示用户更新.当然了,这个 ...

  8. 添加App启动页面

    记录下自己在设置app启动页面时遇到的问题. 先写下自己完整的步骤吧. iPhone Portrait iOS 8-Retina HD 5.5 (1242×2208) @3xiPhone Portra ...

  9. Android 一个app启动另一个app

    最近,一个app启动另一个app,这个玩法挺火的嘛,有没有试过更新QQ到5.1版本,QQ的健康里面就可以添加其他app,实现从QQ跳转到其他app应用.这个挺好玩的,一下子带来了多少流量啊. 一.先来 ...

随机推荐

  1. Noip模拟53 2021.9.14

    T1 ZYB和售货机 首先这道题有两种做法. 一种是发现每个点都可以先被取到只剩一个,只要收益大于$0$ 然后发现建一个$i->f[i]$的图时出现环,要把它去掉, 那么跑一个$tarjan$枚 ...

  2. python3中的bytes和string

    原文链接:https://www.cnblogs.com/abclife/p/7445222.html python 3中最重要的新特性可能就是将文本(text)和二进制数据做了更清晰的区分.文本总是 ...

  3. Spring Security 的注册登录流程

    Spring Security 的注册登录流程 数据库字段设计 主要数据库字段要有: 用户的 ID 用户名称 联系电话 登录密码(非明文) UserDTO对象 需要一个数据传输对象来将所有注册信息发送 ...

  4. UVM RAL模型和内置seq

    转载:UVM RAL模型:用法和应用_寄存器 (sohu.com) 在系统设计中通常会面临两大挑战:缩小技术节点的规模和上市时间(TTM,Time to Market).为了适应激烈的市场竞争,大多数 ...

  5. linux切换shell

    1. $SHELL这一环境变量用于保存当前用户使用的shell,所以我们可以输出$SHELL来查看当前使用的shell是什么: 2. 查看/etc/shells文件,可以看到当前系统中安装的有效的sh ...

  6. populating-next-right-pointers-in-each-node leetcode C++

    Given a binary tree struct TreeLinkNode { TreeLinkNode *left; TreeLinkNode *right; TreeLinkNode *nex ...

  7. Markdown使用方式

    区块 区块引用在段落开头使用>,后面紧跟一个空格符号 > 区块引用 > XXX > XXX 高级技巧 HTML元素 居中  <center>XXX</cent ...

  8. java中Map及Map.Entry详解

    Map是java中的接口,Map.Entry是Map的一个内部接口. Map提供了一些常用方法,如keySet().entrySet()等方法. keySet()方法返回值是Map中key值的集合:e ...

  9. mysql查询表名和列名字

    -- 登录yellowcong 数据库 mysql -uroot -proot yellowcong -- 查看当前数据库 select database() -- 查看数据库里面的表 --table ...

  10. Part 1 to 10 Basic in C#

    Part 1 Introduction The struct of C# program: namespace , class and Main method what is namespace? t ...