2021SC@SDUSC
开源游戏引擎 Overload 代码模块分析 之 OvGame(二)—— Core(一)大纲与 Context
目录
前言
本文是 OvGame 系列的第二部分,笔者将开始解析 Overload 中 OvGame 的 Core 文件。考虑到 Core 文件包含多个文件,本文仅分析一部分,是第一篇。
另外,若想先大致了解该引擎各个大模块,可前往笔者这篇相关文章查看。
若想了解 OvGame 大纲,可前往笔者上篇文章。
分析
1、Core 大纲
Core 文件夹包括了下列 .h 与 .cpp 文件:
显而易见,Core 文件有四个部分:Application、Context、Game、GameRenderer。由于篇幅原因,本篇计划先探究其中一个部分。经过预先查看四个 .h 文件的头文件,笔者发现 Application 引用了 Game 与 Context,Game 引用了 Context 与 GameRenderer,而 GameRenderer 又引用了 Context。所以本篇先探究被引用的最底层部分:Context。
2、Context
2.1 Context.h
2.1.1 头文件
Context 包含了相当多的 Overload 的其他模块文件:
#include <OvRendering/Buffers/UniformBuffer.h>
#include <OvRendering/Buffers/ShaderStorageBuffer.h>
#include <OvPhysics/Core/PhysicsEngine.h>
#include <OvWindowing/Context/Device.h>
#include <OvWindowing/Inputs/InputManager.h>
#include <OvWindowing/Window.h>
#include <OvUI/Core/UIManager.h>
#include <OvCore/ECS/Renderer.h>
#include <OvCore/ResourceManagement/ModelManager.h>
#include <OvCore/ResourceManagement/TextureManager.h>
#include <OvCore/ResourceManagement/ShaderManager.h>
#include <OvCore/ResourceManagement/MaterialManager.h>
#include <OvCore/ResourceManagement/SoundManager.h>
#include <OvCore/SceneSystem/SceneManager.h>
#include <OvCore/Scripting/ScriptInterpreter.h>
#include <OvAudio/Core/AudioEngine.h>
#include <OvAudio/Core/AudioPlayer.h>
#include <OvTools/Filesystem/IniFile.h>
这些大模块的功能不是 OvGame 的研究重点,想了解的读者可以前往笔者这篇概述文章大致了解一下,在此不深入,之后遇到相关使用也只会简单讲解,不会解析函数等的实现方法。不过其中的 OvTools 模块,笔者是已经探究过了,读者可以点击查看其 IniFile.h 的具体内容。
2.1.2 主体代码
主体是一个 Context 类,负责处理引擎的环境设置,代码如下:
class Context
{
public:
/**
* Constructor
*/
Context();
/**
* Destructor
*/
~Context();
public:
const std::string engineAssetsPath;
const std::string projectAssetsPath;
const std::string projectScriptsPath;
std::unique_ptr<OvWindowing::Context::Device> device;
std::unique_ptr<OvWindowing::Window> window;
std::unique_ptr<OvWindowing::Inputs::InputManager> inputManager;
std::unique_ptr<OvRendering::Context::Driver> driver;
std::unique_ptr<OvCore::ECS::Renderer> renderer;
std::unique_ptr<OvUI::Core::UIManager> uiManager;
std::unique_ptr<OvPhysics::Core::PhysicsEngine> physicsEngine;
std::unique_ptr<OvAudio::Core::AudioEngine> audioEngine;
std::unique_ptr<OvAudio::Core::AudioPlayer> audioPlayer;
std::unique_ptr<OvCore::Scripting::ScriptInterpreter> scriptInterpreter;
std::unique_ptr<OvRendering::Buffers::UniformBuffer> engineUBO;
std::unique_ptr<OvRendering::Buffers::ShaderStorageBuffer> lightSSBO;
OvCore::SceneSystem::SceneManager sceneManager;
OvCore::ResourceManagement::ModelManager modelManager;
OvCore::ResourceManagement::TextureManager textureManager;
OvCore::ResourceManagement::ShaderManager shaderManager;
OvCore::ResourceManagement::MaterialManager materialManager;
OvCore::ResourceManagement::SoundManager soundManager;