<2021SC@SDUSC> 开源游戏引擎 Overload 代码模块分析 之 OvGame(八)—— 终篇总结
2021SC@SDUSC
开源游戏引擎 Overload 代码模块分析 之 OvGame(八)—— 终篇总结
目录
- 前言
- 回顾
- 1、.rc
- 2、Utils
- 3、Debug
- 4、Core
- 5、Main.cpp
- 总结
前言
本篇是开源游戏引擎 Overload 模块 OvGame 的最后一篇了。本篇,笔者将对 OvGame 做一个简单的总结。
另外,想先大致了解 Overload 可前往这篇文章,想看其他相关文章请前往笔者的 Overload 专栏自主选择。
回顾
OvGame 模块是一个执行文件,其作用是 调用 Overload 的库及资源,实现游戏的运行展示。它包含了三个文件夹:Core、Debug、Utils,以及一个 Main.cpp 主函数;其次,它还使用了 .rc 文件 以及 resource.h 文件,现在让我们一一简单回顾一下吧(已附上链接):
1、.rc
.rc 文件本质是一个 .txt (文本)文件,一般配合 .h 文件(resource.h)使用;作为一个资源集合包,能引入各种文件,例如脚本、位图、窗口、图标等等。
详见:<2021SC@SDUSC> 开源游戏引擎 Overload 代码模块分析 之 OvGame (一)—— 概况与 .rc 文件
2、Utils
核心是一个 FPSCounter 类,作用是生成一个显示帧速率的面板;因此,也公有继承了许多 Overload::OvUI::Panels 下的类。
详见:<2021SC@SDUSC> 开源游戏引擎 Overload 代码模块分析 之 OvGame(四)—— Utils(终)大纲及 FPSCounter & Debug(上)大纲及 DriverInfo
3、Debug
核心是三个类:DriverInfo、FrameInfo、GameProfiler。
DriverInfo 类负责生成显示 Driver Information,驱动程序(硬件和软件)信息,的面板;同样也公有继承了许多 Overload::OvUI::Panels 下的类。而该类显示信息的方式核心是调用 glfw 的 glGetString(),能根据给出名称来获得所需的信息。
详见:<2021SC@SDUSC> 开源游戏引擎 Overload 代码模块分析 之 OvGame(四)—— Utils(终)大纲及 FPSCounter & Debug(上)大纲及 DriverInfo
FrameInfo 类可以生成 Frame Information,框架信息,的展示面板,也继承了 OvUI 的 PanelUndecorated 类;该类是直接读取结构体 FrameInfo 中的数据,显示出三角形个数、批次数、实例数的信息。
GameProfiler 类可以生成 Profiling Information,配置文件信息,的面板;该类具体展示的是一个操作的 “Action | Total duration | Frame Duration | Frame load | Total calls” 的内容。
详见:<2021SC@SDUSC> 开源游戏引擎 Overload 代码模块分析 之 OvGame(五)—— Debug(下)FrameInfo & GameProfiler
4、Core
核心是四个类:Application、Context、Game、GameRenderer;它们之间是不独立,层层调用(包括了上文的 Utils 和 Debug)关系。
首先,最底层的 Context 类,负责处理引擎的环境设置。该类包含了大量的公有 unique_ptr 智能指针,这些指针指向了 Overload 的各个重要模块,从而实现集合调度;因此,该类能够设置包括:资产路径、基础配置、窗口、图形环境、音频、物理引擎、服务、脚本等。
详见:<2021SC@SDUSC> 开源游戏引擎 Overload 代码模块分析 之 OvGame(二)—— Core(一)大纲与 Context
其次,叠上一层 GameRenderer 类,引入上述的 Context 类,负责游戏界面的渲染工作;使用的 OpenGL 接口,实现场景渲染、引擎 UBO(OpenGL 缓冲对象)设置、更新光照 SSBO(GLSL 缓冲对象)等。
详见:<2021SC@SDUSC> 开源游戏引擎 Overload 代码模块分析 之 OvGame(三)—— Core(二)GameRenderer
而后,再叠上一层 Game 类,引入了上述的 Context 类与 GameRenderer 类,以及 Utils 与 Debug 文件;该类负责处理游戏逻辑,其重要的操作是:从 PreUpdate() 启用输入和事件、经过 Update() 更新、到 PostUpdate() 结束输入输出缓存的一套逻辑更新(UBO、渲染器等等)。
详见:<2021SC@SDUSC> 开源游戏引擎 Overload 代码模块分析 之 OvGame(六)—— Core(三)Game
最后,顶层的 Application 类,引入了上述的 Context 类与 Game 类,是 OvGame 模块的接口点;因此,该类的核心就是调用 Context 和 Game 等的内置变量与函数,实现运行应用。
详见:<2021SC@SDUSC> 开源游戏引擎 Overload 代码模块分析 之 OvGame(七)—— Core(四)Application & Main.cpp
5、Main.cpp
核心是利用条件编译命令,选择函数名为 int 型 main() 或 INT(重定义前即 int)型 WinMain(),实现总体调控是否进入 Debug 模式;函数体功能则是运行应用程序与中止引擎程序。
详见:<2021SC@SDUSC> 开源游戏引擎 Overload 代码模块分析 之 OvGame(七)—— Core(四)Application & Main.cpp
总结
通过回顾,我们可以发现 OvGame 的一个共同特点:层层引用,封装功能,集合调度。由此可见,对于一个应用程序来说,功能之间的独立性是非常重要的,这样既能使代码简明、逻辑清晰,又能使代码拥有很强的泛化能力,即可以之间用于其他项目,这是我们在以后的工作项目中可以考虑的编写方法。
<2021SC@SDUSC> 开源游戏引擎 Overload 代码模块分析 之 OvGame(八)—— 终篇总结相关推荐
- <2021SC@SDUSC>开源游戏引擎Overload代码分析三(OvWindowing结束):OvWindowing——Dialogs
2021SC@SDUSC Overload代码分析三:OvWindowing--Dialogs 前言 Dialogs 一.FileDialog FileDialog.h FileDialog.cpp ...
- <2021SC@SDUSC>【Overload游戏引擎】代码下载及安装配置
<2021SC@SDUSC>[Overload游戏引擎]代码下载及安装配置 代码下载 安装配置 环境配置 代码编译 注意事项 代码下载 下载网址:https://gitee.com/mir ...
- 【Overload游戏引擎】源码分析之十三:OvRendering函数库(十一)
2021SC@SDUSC 目录 1.Driver 1.1构造函数 1.2InitGlew 1.3GLDebugMessageCallback 2.Renderer 2.1Draw 2.2FetchGL ...
- 《Genesis-3D开源游戏引擎-FQA常见问题解答》2014年01月10号版本
1.Genesis-3D开源游戏引擎主要面向哪些用户人群?有限制吗? 1.我们的引擎没有限制,只要您想了解和使用我们的引擎,就可以加入Genesis-3D的大家庭. 2.我们的主要用户群是各个相关的企 ...
- 两大开源游戏引擎Cocos2d-x及OGEngine对比分析
在近期的全球移动开发者大会上,触控发布了Cocos 3D引擎:而在差不多同时间,以安卓为主的OGEngine也发布了新版本,并宣布将支持跨平台. Cocos2d-x和OGEngine都是当前比较受开发 ...
- 《Genesis-3D开源游戏引擎完整实例教程-跑酷游戏篇:简介及目录》(附上完整工程文件)...
2019独角兽企业重金招聘Python工程师标准>>> 跑酷游戏制作 游戏类型: 此游戏Demo,为跑酷类游戏. 框架简介: 游戏通常由程序代码和资源组成.如果说模型.贴图.声音之类 ...
- 开源游戏引擎_Hatchit:开源游戏引擎
开源游戏引擎 通过视频游戏,越来越多的学生正在学习开源世界. 像FreeCiv和Minetest这样的开源游戏邀请年轻的玩家来研究源代码,而像SpigotMC这样的项目则使他们能够编写插件来扩展自己喜 ...
- HTML5 开源游戏引擎 LayaAir
LayaAir是HTML5开源引擎 提供Canvas和Webgl同时渲染,如果Webgl不可用,则可自动切换到Canvas模式.引擎为高性能游戏设计,支持AS,TS,JS三种语言开发,一套代码三端齐发 ...
- 最常见的开源游戏引擎
开源即开放源代码(Open Source),游戏引擎好比赛车的引擎,是用于控制所有游戏功能的主程序,从计算碰撞.物理加速系统和物体的相对位置,到接受玩家的输入,以及按照正确的音量输出声音等等.无论是角 ...
- 最常用的开源游戏引擎
开源即开放原代码(Open Source),游戏引擎好比赛车的引擎,是用于控制所有游戏功能的主程序,从计算碰撞.物理加速系统和物体的相对位置,到接受玩家的输入,以及按照正确的音量输出声音等等.无论是角 ...
最新文章
- 【Tree】迷宫生成算法
- cocos2dx 3.2之Lua打飞机项目
- 光落在你脸上,可爱一如往常
- HNUSTOJ-1437 无题
- 用Siri显示二维码, iOS11, INGetVisualCodeIntent
- webpack 生产环境下插件用途
- spring框架类加载顺顺序 并 在spring启动后查询数据库加载到容器内
- LogServer日志详解
- IDW空间插值法matlab,基于IDW对PM2.5进行空间插值及可视化
- 最新服务器处理器天梯,2019服务器CPU天梯图之性能排行榜(双路三路四路) - 服务器百科...
- Lesson 6英语句子的种类(简单并列复合句)
- excel表格打印每页都有表头_Excel怎么能让每一页都打印上相同的顶端和底端标题?...
- Java 的设计模式
- 深度学习——模型量化、压缩及加速( MobileNets )
- 《微信公众平台开发最佳实践》——导读
- [转载]复旦女博士于娟——为啥是我得癌症? (转)
- 微信域名检测的C#实现
- qt creater快捷键使用
- DB2-GPFS(General Parallel File System)并行文件系统简叙、安装使用及DB高可用
- java自适应响应式 企业网站源码 SSM 生成静态化 手机 平板 PC