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. DP接口中AUX

    背景技术: DP接口(DisplayPort)是一种图像显示接口,它不仅可以支持全高清显示分辨率(1920×1080),还能支持4k分辨率(3840×2160),以及最新的8k分辨率(7680×432 ...

  2. Linux入门所必备的Linux命令和C语言基础

    文件和目录(底部有视频资料) cd /home 进入 '/ home' 目录' cd - 返回上一级目录 cd -/- 返回上两级目录 cd 进入个人的主目录 cd ~user1 进入个人的主目录 c ...

  3. Spring中自定义Schema扩展机制

    一.前言 Spring 为基于 XML 构建的应用提供了一种扩展机制,用于定义和配置 Bean. 它允许使用者编写自定义的 XML bean 解析器,并将解析器本身以及最终定义的 Bean 集成到 S ...

  4. VirtualBox Share Folder

    转载:https://www.cnblogs.com/Dennis-mi/articles/5896586.html 使用virtualbox最方便的host-guest交换文件方案莫过于共享文件夹功 ...

  5. zabbix 监控redis 挂掉自动重启 并发送企业微信

    1.创建redis监控项[配置]-[主机]-[监控项]-创建监控项,监控6379端口(注意关闭防火墙或者开启防火墙端口6379) redis配置文件设置允许任何地址监听: 添加监控项 2.创建redi ...

  6. MySQL、Oracle批量插入SQL的通用写法

    举个例子: 现在要批量新增User对象到数据库USER表中 public class User{ //姓名 private String name; //年龄 private Integer age; ...

  7. 菜鸡的Java笔记 - java 枚举

    枚举        枚举属于加强版的多例设计模式            多例设计模式与枚举        多例设计模式的本质在于构造方法的私有化.而后在类的内部产生若干个实例化对象,随后利用一个 st ...

  8. Python介绍和安装

    python介绍和安装 目录 python介绍和安装 1. Python简介 2. 解释器 2.1 Python解释器的种类 2.2 Python解释器版本 3. Windows下安装Python 3 ...

  9. 使用VSCode编写,发布cnblogs

    WriteCnBlog插件作者写的教程: https://www.cnblogs.com/caipeiyu/p/11774968.html

  10. Java安全之基于Tomcat的Filter型内存马

    Java安全之基于Tomcat的Filter型内存马 写在前面 现在来说,内存马已经是一种很常见的攻击手法了,基本红队项目中对于入口点都是选择打入内存马.而对于内存马的支持也是五花八门,甚至各大公司都 ...