2021SC@SDUSC
开源游戏引擎 Overload 代码模块分析 之 OvGame(三)—— Core(二)GameRenderer
目录
前言
本篇是 OvGame 的 Core 的第二篇,将探究其倒二层引用的文件:GameRenderer。该文件会包含 Core 的另一个部分 —— Context,所以如果读者已经有些遗忘、或是尚未了解过,请前往 Core(一)阅读。
另外,若想先大致了解该引擎各个大模块,可前往笔者这篇相关文章查看。
若想了解 OvGame 大纲,可前往笔者这篇文章。
GameRenderer
1、GameRenderer.h
1.1 头文件
#include <OvCore/ECS/Actor.h>
#include <OvCore/SceneSystem/SceneManager.h>
#include <OvCore/ECS/Components/CCamera.h>
#include "OvGame/Core/Context.h"
这里引入了 Overload 的 OvCore 模块的部分文件,在此不多讲述,遇到再简单探究;还引入了上一篇探究的 Context 文件。
1.2 主体代码
该文件的主体代码包含了一个 GameRenderer 类,负责游戏界面的渲染工作,定义如下:
class GameRenderer
{
public:
/**
* Create the EditorRenderer
* @param p_context
*/
GameRenderer(Context& p_context);
/**
* Render the scene
*/
void RenderScene();
/**
* Update the engine UBO
* @param p_mainCamera
*/
void UpdateEngineUBO(OvCore::ECS::Components::CCamera& p_mainCamera);
/**
* Update the light SSBO with the current scene
* @param p_scene
*/
void UpdateLights(OvCore::SceneSystem::Scene& p_scene);
/**
* Update the light SSBO with the current scene (Lights outside of the given frustum are culled)
* @param p_scene
*/
void UpdateLightsInFrustum(OvCore::SceneSystem::Scene& p_scene, const OvRendering::Data::Frustum& p_frustum);
private:
Context& m_context;
OvCore::Resources::Material m_emptyMaterial;
};
该类包含了两个私有类,类型分别是上篇文章的 Context.h 文件中定义的 Context 类与包含材质设置以及 Shader 的一个类 Material;另一方面,GameRenderer 的函数功能已有注释,不多赘述,我们来 cpp 文件中进一步探究:
2、GameRenderer.cpp
2.1 头文件
#include "OvGame/Core/GameRenderer.h"
#include <OvAnalytics/Profiling/ProfilerSpy.h>
#include <OvCore/ECS/Components/CMaterialRenderer.h>
#include <OvCore/ECS/Components/CModelRenderer.h>
#include <OvCore/ECS/Components/CPointLight.h>
#include <OvCore/ECS/Components/CDirectionalLight.h>
#include <OvCore/ECS/Components/CSpotLight.h>
#include <OvCore/ECS/Components/CAmbientBoxLight.h>
#include <OvCore/ECS/Components/CAmbientSphereLight.h>
该文件一样是引入了多个 Overload 几个模块的文件,涉及到再作分析。