diff --git a/source/graphics/Camera.cpp b/source/graphics/Camera.cpp
index 0862317479..aae4832fd2 100644
--- a/source/graphics/Camera.cpp
+++ b/source/graphics/Camera.cpp
@@ -15,11 +15,6 @@
* along with 0 A.D. If not, see .
*/
-/*
- * CCamera holds a view and a projection matrix. It also has a frustum
- * which can be used to cull objects for rendering.
- */
-
#include "precompiled.h"
#include "Camera.h"
@@ -32,6 +27,7 @@
#include "ps/Game.h"
#include "ps/World.h"
#include "renderer/Renderer.h"
+#include "renderer/SceneRenderer.h"
#include "renderer/WaterManager.h"
CCamera::CCamera()
@@ -275,7 +271,7 @@ CVector3D CCamera::GetWorldCoordinates(int px, int py, bool aboveWater) const
CPlane plane;
plane.Set(CVector3D(0.f, 1.f, 0.f), // upwards normal
- CVector3D(0.f, g_Renderer.GetWaterManager().m_WaterHeight, 0.f)); // passes through water plane
+ CVector3D(0.f, g_Renderer.GetSceneRenderer().GetWaterManager().m_WaterHeight, 0.f)); // passes through water plane
bool gotWater = plane.FindRayIntersection( origin, dir, &waterPoint );
@@ -353,7 +349,7 @@ CVector3D CCamera::GetFocus() const
CPlane plane;
plane.Set(CVector3D(0.f, 1.f, 0.f), // upwards normal
- CVector3D(0.f, g_Renderer.GetWaterManager().m_WaterHeight, 0.f)); // passes through water plane
+ CVector3D(0.f, g_Renderer.GetSceneRenderer().GetWaterManager().m_WaterHeight, 0.f)); // passes through water plane
bool gotWater = plane.FindRayIntersection( origin, dir, &waterPoint );
diff --git a/source/graphics/CameraController.cpp b/source/graphics/CameraController.cpp
index f29729f3fb..459fb6a2f6 100644
--- a/source/graphics/CameraController.cpp
+++ b/source/graphics/CameraController.cpp
@@ -36,6 +36,7 @@
#include "ps/TouchInput.h"
#include "ps/World.h"
#include "renderer/Renderer.h"
+#include "renderer/SceneRenderer.h"
#include "renderer/WaterManager.h"
#include "simulation2/Simulation2.h"
#include "simulation2/components/ICmpPosition.h"
@@ -578,7 +579,7 @@ void CCameraController::FocusHeight(bool smooth)
const float ground = std::max(
g_Game->GetWorld()->GetTerrain()->GetExactGroundLevel(nearPoint.X, nearPoint.Z),
- g_Renderer.GetWaterManager().m_WaterHeight);
+ g_Renderer.GetSceneRenderer().GetWaterManager().m_WaterHeight);
// filter ground levels for smooth camera movement
const float filtered_near_ground = g_Game->GetWorld()->GetTerrain()->GetFilteredGroundLevel(nearPoint.X, nearPoint.Z, near_radius);
@@ -587,7 +588,7 @@ void CCameraController::FocusHeight(bool smooth)
// filtered maximum visible ground level in view
const float filtered_ground = std::max(
std::max(filtered_near_ground, filtered_pivot_ground),
- g_Renderer.GetWaterManager().m_WaterHeight);
+ g_Renderer.GetSceneRenderer().GetWaterManager().m_WaterHeight);
// target camera height above pivot point
const float pivot_height = -forwards.Y * (m_Zoom.GetSmoothedValue() - m_ViewNear);
diff --git a/source/graphics/GameView.cpp b/source/graphics/GameView.cpp
index 1fdac9082d..f9ebae8483 100644
--- a/source/graphics/GameView.cpp
+++ b/source/graphics/GameView.cpp
@@ -55,6 +55,7 @@
#include "ps/TouchInput.h"
#include "ps/World.h"
#include "renderer/Renderer.h"
+#include "renderer/SceneRenderer.h"
#include "renderer/WaterManager.h"
#include "simulation2/Simulation2.h"
#include "simulation2/components/ICmpPosition.h"
@@ -167,7 +168,7 @@ CGameView::CGameView(CGame *pGame):
m(new CGameViewImpl(pGame))
{
m->CullCamera = m->ViewCamera;
- g_Renderer.SetSceneCamera(m->ViewCamera, m->CullCamera);
+ g_Renderer.GetSceneRenderer().SetSceneCamera(m->ViewCamera, m->CullCamera);
}
CGameView::~CGameView()
@@ -233,7 +234,7 @@ void CGameView::BeginFrame()
// Set up cull camera
m->CullCamera = m->ViewCamera;
}
- g_Renderer.SetSceneCamera(m->ViewCamera, m->CullCamera);
+ g_Renderer.GetSceneRenderer().SetSceneCamera(m->ViewCamera, m->CullCamera);
CheckLightEnv();
@@ -242,7 +243,7 @@ void CGameView::BeginFrame()
void CGameView::Render()
{
- g_Renderer.RenderScene(*this);
+ g_Renderer.GetSceneRenderer().RenderScene(*this);
}
///////////////////////////////////////////////////////////
@@ -254,7 +255,7 @@ void CGameView::EnumerateObjects(const CFrustum& frustum, SceneCollector* c)
PROFILE3("submit terrain");
CTerrain* pTerrain = m->Game->GetWorld()->GetTerrain();
- float waterHeight = g_Renderer.GetWaterManager().m_WaterHeight + 0.001f;
+ float waterHeight = g_Renderer.GetSceneRenderer().GetWaterManager().m_WaterHeight + 0.001f;
const ssize_t patchesPerSide = pTerrain->GetPatchesPerSide();
// find out which patches will be drawn
@@ -302,7 +303,7 @@ void CGameView::CheckLightEnv()
void CGameView::UnloadResources()
{
g_TexMan.UnloadTerrainTextures();
- g_Renderer.GetWaterManager().UnloadWaterTextures();
+ g_Renderer.GetSceneRenderer().GetWaterManager().UnloadWaterTextures();
}
void CGameView::Update(const float deltaRealTime)
@@ -387,30 +388,31 @@ InReaction CGameView::HandleEvent(const SDL_Event_* ev)
case SDL_HOTKEYPRESS:
{
std::string hotkey = static_cast(ev->ev.user.data1);
+ CSceneRenderer& sceneRenderer = g_Renderer.GetSceneRenderer();
if (hotkey == "wireframe")
{
if (g_XmppClient && g_rankedGame == true)
break;
- else if (g_Renderer.GetModelRenderMode() == SOLID)
+ else if (sceneRenderer.GetModelRenderMode() == SOLID)
{
- g_Renderer.SetTerrainRenderMode(EDGED_FACES);
- g_Renderer.SetWaterRenderMode(EDGED_FACES);
- g_Renderer.SetModelRenderMode(EDGED_FACES);
- g_Renderer.SetOverlayRenderMode(EDGED_FACES);
+ sceneRenderer.SetTerrainRenderMode(EDGED_FACES);
+ sceneRenderer.SetWaterRenderMode(EDGED_FACES);
+ sceneRenderer.SetModelRenderMode(EDGED_FACES);
+ sceneRenderer.SetOverlayRenderMode(EDGED_FACES);
}
- else if (g_Renderer.GetModelRenderMode() == EDGED_FACES)
+ else if (sceneRenderer.GetModelRenderMode() == EDGED_FACES)
{
- g_Renderer.SetTerrainRenderMode(WIREFRAME);
- g_Renderer.SetWaterRenderMode(WIREFRAME);
- g_Renderer.SetModelRenderMode(WIREFRAME);
- g_Renderer.SetOverlayRenderMode(WIREFRAME);
+ sceneRenderer.SetTerrainRenderMode(WIREFRAME);
+ sceneRenderer.SetWaterRenderMode(WIREFRAME);
+ sceneRenderer.SetModelRenderMode(WIREFRAME);
+ sceneRenderer.SetOverlayRenderMode(WIREFRAME);
}
else
{
- g_Renderer.SetTerrainRenderMode(SOLID);
- g_Renderer.SetWaterRenderMode(SOLID);
- g_Renderer.SetModelRenderMode(SOLID);
- g_Renderer.SetOverlayRenderMode(SOLID);
+ sceneRenderer.SetTerrainRenderMode(SOLID);
+ sceneRenderer.SetWaterRenderMode(SOLID);
+ sceneRenderer.SetModelRenderMode(SOLID);
+ sceneRenderer.SetOverlayRenderMode(SOLID);
}
return IN_HANDLED;
}
diff --git a/source/graphics/MiniMapTexture.cpp b/source/graphics/MiniMapTexture.cpp
index a1aaa384de..7d8466e51c 100644
--- a/source/graphics/MiniMapTexture.cpp
+++ b/source/graphics/MiniMapTexture.cpp
@@ -38,6 +38,7 @@
#include "ps/XML/Xeromyces.h"
#include "renderer/Renderer.h"
#include "renderer/RenderingOptions.h"
+#include "renderer/SceneRenderer.h"
#include "renderer/WaterManager.h"
#include "scriptinterface/Object.h"
#include "simulation2/Simulation2.h"
@@ -180,7 +181,7 @@ CMiniMapTexture::~CMiniMapTexture()
void CMiniMapTexture::Update(const float UNUSED(deltaRealTime))
{
- if (m_WaterHeight != g_Renderer.GetWaterManager().m_WaterHeight)
+ if (m_WaterHeight != g_Renderer.GetSceneRenderer().GetWaterManager().m_WaterHeight)
{
m_TerrainTextureDirty = true;
m_FinalTextureDirty = true;
@@ -263,7 +264,7 @@ void CMiniMapTexture::RebuildTerrainTexture(const CTerrain* terrain)
const u32 width = m_MapSize - 1;
const u32 height = m_MapSize - 1;
- m_WaterHeight = g_Renderer.GetWaterManager().m_WaterHeight;
+ m_WaterHeight = g_Renderer.GetSceneRenderer().GetWaterManager().m_WaterHeight;
m_TerrainTextureDirty = false;
for (u32 j = 0; j < height; ++j)
diff --git a/source/graphics/ObjectEntry.cpp b/source/graphics/ObjectEntry.cpp
index 41340a36d2..a7802e1904 100644
--- a/source/graphics/ObjectEntry.cpp
+++ b/source/graphics/ObjectEntry.cpp
@@ -1,4 +1,4 @@
-/* Copyright (C) 2021 Wildfire Games.
+/* Copyright (C) 2022 Wildfire Games.
* This file is part of 0 A.D.
*
* 0 A.D. is free software: you can redistribute it and/or modify
@@ -36,6 +36,7 @@
#include "ps/Game.h"
#include "ps/World.h"
#include "renderer/Renderer.h"
+#include "renderer/SceneRenderer.h"
#include "simulation2/Simulation2.h"
#include
@@ -80,7 +81,7 @@ bool CObjectEntry::BuildVariation(const std::vector*>& comp
if (variation.decal.m_SizeX && variation.decal.m_SizeZ)
{
- CMaterial material = g_Renderer.GetMaterialManager().LoadMaterial(m_Base->m_Material);
+ CMaterial material = g_Renderer.GetSceneRenderer().GetMaterialManager().LoadMaterial(m_Base->m_Material);
for (const CObjectBase::Samp& samp : m_Samplers)
{
@@ -103,7 +104,7 @@ bool CObjectEntry::BuildVariation(const std::vector*>& comp
if (!variation.particles.empty())
{
- m_Model = new CModelParticleEmitter(g_Renderer.GetParticleManager().LoadEmitterType(variation.particles));
+ m_Model = new CModelParticleEmitter(g_Renderer.GetSceneRenderer().GetParticleManager().LoadEmitterType(variation.particles));
return true;
}
@@ -132,7 +133,7 @@ bool CObjectEntry::BuildVariation(const std::vector*>& comp
CModel* model = new CModel(objectManager.GetSkeletonAnimManager(), m_Simulation);
delete m_Model;
m_Model = model;
- model->SetMaterial(g_Renderer.GetMaterialManager().LoadMaterial(m_Base->m_Material));
+ model->SetMaterial(g_Renderer.GetSceneRenderer().GetMaterialManager().LoadMaterial(m_Base->m_Material));
model->GetMaterial().AddStaticUniform("objectColor", CVector4D(m_Color.r, m_Color.g, m_Color.b, m_Color.a));
model->InitModel(modeldef);
diff --git a/source/graphics/ParticleEmitter.cpp b/source/graphics/ParticleEmitter.cpp
index 640c9455d8..cd3c596417 100644
--- a/source/graphics/ParticleEmitter.cpp
+++ b/source/graphics/ParticleEmitter.cpp
@@ -1,4 +1,4 @@
-/* Copyright (C) 2021 Wildfire Games.
+/* Copyright (C) 2022 Wildfire Games.
* This file is part of 0 A.D.
*
* 0 A.D. is free software: you can redistribute it and/or modify
@@ -26,8 +26,8 @@
#include "graphics/ShaderProgram.h"
#include "graphics/TextureManager.h"
#include "ps/CStrInternStatic.h"
-
#include "renderer/Renderer.h"
+#include "renderer/SceneRenderer.h"
CParticleEmitter::CParticleEmitter(const CParticleEmitterTypePtr& type) :
m_Type(type), m_Active(true), m_NextParticleIdx(0), m_EmissionRoundingError(0.f),
@@ -179,11 +179,11 @@ void CParticleEmitter::PrepareForRendering()
void CParticleEmitter::Bind(const CShaderProgramPtr& shader)
{
- CLOSTexture& los = g_Renderer.GetScene().GetLOSTexture();
+ CLOSTexture& los = g_Renderer.GetSceneRenderer().GetScene().GetLOSTexture();
shader->BindTexture(str_losTex, los.GetTextureSmooth());
shader->Uniform(str_losTransform, los.GetTextureMatrix()[0], los.GetTextureMatrix()[12], 0.f, 0.f);
- const CLightEnv& lightEnv = g_Renderer.GetLightEnv();
+ const CLightEnv& lightEnv = g_Renderer.GetSceneRenderer().GetLightEnv();
shader->Uniform(str_sunColor, lightEnv.m_SunColor);
shader->Uniform(str_fogColor, lightEnv.m_FogColor);
shader->Uniform(str_fogParams, lightEnv.m_FogFactor, lightEnv.m_FogMax, 0.f, 0.f);
diff --git a/source/graphics/TerrainTextureEntry.cpp b/source/graphics/TerrainTextureEntry.cpp
index d84e28a4fc..03a81eae11 100644
--- a/source/graphics/TerrainTextureEntry.cpp
+++ b/source/graphics/TerrainTextureEntry.cpp
@@ -1,4 +1,4 @@
-/* Copyright (C) 2021 Wildfire Games.
+/* Copyright (C) 2022 Wildfire Games.
* This file is part of 0 A.D.
*
* 0 A.D. is free software: you can redistribute it and/or modify
@@ -34,6 +34,7 @@
#include "ps/Filesystem.h"
#include "ps/XML/Xeromyces.h"
#include "renderer/Renderer.h"
+#include "renderer/SceneRenderer.h"
#include