| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 游戏开发 -> <2021SC@SDUSC> 开源游戏引擎 Overload 代码模块分析 之 OvGame(四)—— Utils(终)大纲及 FPSCounter & Debug(上)大纲及 DriverInfo -> 正文阅读 |
|
[游戏开发]<2021SC@SDUSC> 开源游戏引擎 Overload 代码模块分析 之 OvGame(四)—— Utils(终)大纲及 FPSCounter & Debug(上)大纲及 DriverInfo |
2021SC@SDUSC 目录前言正如上篇所说,本篇是为了 OvGame 的 Core 的 Game 部分,将先探究 OvGame 的其它文件: Utils 的 FPSCounter 以及 Debug 的 DriverInfo。 另外,若想先大致了解该引擎各个大模块,可前往笔者这篇相关文章查看。 现在,让我们先了解一下 Utils 大纲及其 FPSCounter: 分析1、Utils1.1 大纲Utils 文件包括了下列文件: 1.2 FPSCounter.h1.2.1 头文件
该文件包含的头文件都是来自 Overload 的其它模块,在此不多讲述,遇到再简单探究。 1.2.2 主体代码主体是一个 FPSCounter 类,作用是显示帧速率的面板,定义如下:
首先,该类公有继承了 Overload 的模块 OvUI 中的 PanelUndecorated 类,功能是一个简单的面板,可以变形但没有样式(没有背景等),但它还层层向上公有继承了许多 OvUI::Panels 下的类,从底层至顶层依次是: 1、APanelTransformable 类,是一个本地化在画布中的面板。 其次,FPSCounter 的变量还加入了有色文本类 TextColored 与窗口类 Window,此外定义了变量运行时间与帧数;函数也不多,咱们在 cpp 文件中深入探究: 1.3 FPSCounter.cpp头文件仅有上述的 OvGame/Utils/FPSCounter.h,所以咱们直接看函数: FPSCounter() 函数
这是一个构造函数,先用参数初始化表初始化窗口类对象 m_window;再初始化文本类 m_text 的 color 颜色变量为 OvUI::Types::Color 颜色结构体中的 Yellow 黄色;接着,用 OvUI::Settings::EHorizontalAlignment 水平对齐枚举类的 RIGHT 右对齐也初始化 m_defaultHorizontalAlignment,该变量来自其继承的父类 APanelTransformable 类;然后,同样是其父类 APanelTransformable 的变量 m_defaultPosition,用 m_window 的 GetSize().first 获得窗口宽度,设置默认位置;接着,m_text 设置其文本变量 content; 最后,调用父类 WidgetContainer 的函数 ConsiderWidget(),该函数的两个参数意义依次是部件类、如何管理内存。其中后者的实现方式是用三目运算符,判断若 true,则赋值 INTERNAL_MANAGMENT(内部管理);若 false,则赋值 EXTERNAL_MANAGMENT(外部管理),这两个词都是 OvUI 的 EMemoryMode 枚举类。然后,ConsiderWidget() 函数会将传入的部件类与管理内存的方式通过 make_pair() 绑定存储。 Update() 函数
该函数负责更新数据:首先,运行时间 m_elapsed 增加传入的单位时间,帧数自加一;然后判断,如果 m_elapsed 超过 0.1f,即 0.1 秒,则通过;接着,先更新 m_text 的内容为计算后的当前帧率,再调用父类 APanelTransformable 的 SetPosition(),用 m_window 的 GetSize().first 获得窗口宽度,设置其在窗口中的位置,以及 APanelTransformable 的 SetAlignment() 设置水平右对齐与竖直顶对齐;最后重置时间与帧数为 0,为了下次计算帧率。 至此,FPSCounter 部分,也是 Utils 文件的所有内容就了解完了,并不复杂。其中,代码多处用到了 OvUI::Panels 下的各种类的函数,这不属于笔者的探究范围,感兴趣的读者请自行了解。接下来,咱们继续探究 Debug 文件: 2、Debug2.1 大纲Debug 文件包含了以下内容: 值得一提的是,Debug 的文件有进行下述命令:
这是条件编译命令,此处的含义是:如果 “_DEBUG” 被定义过了,就执行包含的所有程序段。由于 Debug 所有文件都使用了该命令且代码都含于其中,之后其所有源码展示就不再展示该命令了。 2.2 DriverInfo.h2.2.1 头文件
该文件包含的都是 Overload 其它模块的头文件,在此暂不详述。 2.2.2 主要代码主要代码是一个 DriverInfo 类,负责生成显示 Driver Information,驱动程序(硬件和软件)信息,的面板,定义如下:
该类和上文的 Utils 中的 FPSCounter 类一样,继承了 OvUI 模块中的 PanelUndecorated 类,不再重复叙述;而该类自己也并不复杂,只包含了一个公有构造函数。 2.3 DriverInfo.cpp该文件的头文件仅有上述的 DriverInfo.h,所以直接看唯一的函数: DriverInfo() 函数
该构造函数就能直接生成一个信息面板:首先,传入的两个参数意义分别是渲染器和窗口;其次,和 FPSCounter 中的操作一样,设置文本右对齐和底对齐,部件的初始位置距离窗口边界 10.f 计量单位;最后,连续调用 CreateWidget(),依次展示 Vendor(供应商)、Hardware(硬件)、OpenGL Version(OpenGL 版本)、GLSL Version(GLSL 版本)。 最后使用的 CreateWidget() 函数,是其父类 WidgetContainer 类的模板函数,能生成一个按需设定的部件。此处传入的模板是有色文本类 TextColored,传入的参数是展示的内容字符串和文本颜色。其中,内容的组成是硬件 / 软件名文本、加上由渲染器 p_renderer 的 GetString() 调用 glfw 的 glGetString() 获得所需的信息,并以字符串形式返回的字符串。 总结本篇文章探究的两个部分 —— Utils 的 FPSCounter 以及 Debug 的 DriverInfo —— 功能都是一些部件的展示,用到的主要是 OvUI 中的函数,所以思路并不复杂。另外,OvGame 的 Core 文件的 Utils 部分在本篇也全部探究完毕了。 下一篇,笔者将继续探究 Debug 的剩余两部分 FrameInfo 与 GameProfiler。 |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/27 20:57:56- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |