UE4之Slate: App启动与最外层Runtime结构
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结构的更多相关文章
- UE4之Slate:App默认窗口的创建流程
UE4版本:4.24.3源码编译 Windows10 + VS2019开发环境 在先前分享的基础上,现在来梳理下App启动时默认窗口的创建流程,以及相关的类.对象之间的抽象层级: 纯C++工程配置 S ...
- 一触即发 App启动优化最佳实践
一触即发 App启动优化最佳实践 本文在 DiyCode 和 CSDN个人博客 同时首发,关注作者的 DiyCode帐号 或者 作者微博 可第一时间收到新文章推送. 文中的很多图都是Google性能优 ...
- iOS开发app启动原理及视图和控制器的函数调用顺序
main()函数是整个程序的入口,在程序启动之前,系统会调用exec()函数.在Unix中exec和system的不同在于,system是用shell来调用程序,相当于fork+exec+waitpi ...
- IOS (APP 启动 相应处理)
APP 每次启动的入口都是通过: - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSD ...
- vue隐藏APP启动时显示的{{}}
vue隐藏APP启动时显示的{{}} vue组件在编译好之前会显示{{msg}},在官网上找到这个
- [FMX] Android APP 启动黑屏优化补丁
使用说明 *************************************************** Android APP 启动黑屏优化补丁 作者: Swish, YangYxd 201 ...
- app启动调用的api
(8)在app启动时,调用一个初始化api获取必要的信息 通过这个初始化api,获取一下必要的信息,例如,最新的app版本.当发现本地app的版本已经低于最新的app版本,可提示用户更新.当然了,这个 ...
- 添加App启动页面
记录下自己在设置app启动页面时遇到的问题. 先写下自己完整的步骤吧. iPhone Portrait iOS 8-Retina HD 5.5 (1242×2208) @3xiPhone Portra ...
- Android 一个app启动另一个app
最近,一个app启动另一个app,这个玩法挺火的嘛,有没有试过更新QQ到5.1版本,QQ的健康里面就可以添加其他app,实现从QQ跳转到其他app应用.这个挺好玩的,一下子带来了多少流量啊. 一.先来 ...
随机推荐
- Noip模拟62 2021.9.26
T1 Set 真就随机化拿了$90$?? 不过还是有依据的,毕竟这道题出解的几率很大,随出答案的概率也极大 所以不妨打一个随机化 1 #include<bits/stdc++.h> 2 # ...
- Python之@property详解及底层实现介绍
转自:https://blog.csdn.net/weixin_42681866/article/details/83376484 前文 Python内置有三大装饰器:@staticmethod(静态 ...
- cf2A Winner(implementation)
题意: N个回合. 每个回合:name score[名为name的这个人得了score分(可负可正)]. 问最后谁的累积分数是最高的.设为M.如果有好几个都得了M,找出这几个人中哪个最早回合累积分数超 ...
- Xtrabackup 全量备份脚本
#!/bin/bash #备份文件的名字为当前主机的IP地址+tar.gz,例如172.16.103.1.tar.gz,且每次备份成功之后都会清空本地的备份目录. #相关目录 mkdir -p /xt ...
- Ambari 2.4 在 CentOS 7.4 因 TLS_1.2 协商内部错误导致注册失败
问题背景 业务准备在天翼云上搭建一套线上环境,VM 操作系统版本为 CentOS Linux release 7.4.1708,但是在 ambari Web 管理页面上部署hadoop节点主机的时候, ...
- robotframework定位页面内Frame框架里的元素
在自动化开发中,会遇到在页面内部点开一个新的页面后,新的页面元素无法定位到的情况,如点击下图的上传图片,弹出的界面无法直接定位到: 遇到这种情况需要查看弹出界面是否是Frame框架页面:打开火狐浏览器 ...
- liteIDE配置环境变量
1.下载安装go https://www.cnblogs.com/Jack-cx/p/9878213.html 2.下载ide https://www.golangtc.com/download/li ...
- RabbitMQ(六)消息幂等性处理
一.springboot整合rabbitmq 我们需要新建两个工程,一个作为生产者,另一个作为消费者.在pom.xml中添加amqp依赖: <dependency> <groupId ...
- Python 函数常用类型
函数常用类型 无参数,无返回值 无参数,有返回值 有参数,无返回值 有参数,有返回值2.无参数,无返回值 无参数无返回值 def hello(): ...
- 菜鸡的Java笔记第三 - java 自动转换原则
自动转换原则 数据范围保存大的数据类型要转换为数据范围保存小的数据类型,使用强制转换(强制转型就是在变量的前面加括号,在括号里写上需要强制要转的类型.) 数据范围保存小的数据类型可以自动转换为数据范围 ...