<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 的一个共同特点:层层引用,封装功能,集合调度。由此可见,对于一个应用程序来说,功能之间的独立性是非常重要的,这样既能使代码简明、逻辑清晰,又能使代码拥有很强的泛化能力,即可以之间用于其他项目,这是我们在以后的工作项目中可以考虑的编写方法。

clapping

你可能感兴趣的:(2021SC@SDUSC,Overload,游戏引擎)