summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--game/scenary/foliage.cpp2
-rw-r--r--game/scenary/foliage.h2
-rw-r--r--game/terrain.cpp2
-rw-r--r--game/terrain.h2
-rw-r--r--game/vehicles/railVehicleClass.cpp2
-rw-r--r--game/vehicles/railVehicleClass.h2
-rw-r--r--gfx/aabb.h2
-rw-r--r--gfx/gl/sceneProvider.cpp2
-rw-r--r--gfx/gl/sceneProvider.h2
-rw-r--r--gfx/gl/shadowMapper.cpp9
-rw-r--r--gfx/renderable.cpp2
-rw-r--r--gfx/renderable.h2
-rw-r--r--test/test-assetFactory.cpp4
-rw-r--r--test/test-geoData.cpp4
-rw-r--r--test/test-render.cpp14
-rw-r--r--ui/gameMainWindow.cpp6
-rw-r--r--ui/gameMainWindow.h2
17 files changed, 34 insertions, 27 deletions
diff --git a/game/scenary/foliage.cpp b/game/scenary/foliage.cpp
index c1bf9b9..159a078 100644
--- a/game/scenary/foliage.cpp
+++ b/game/scenary/foliage.cpp
@@ -41,7 +41,7 @@ Foliage::render(const SceneShader & shader, const Frustum &) const
}
void
-Foliage::shadows(const ShadowMapper & mapper) const
+Foliage::shadows(const ShadowMapper & mapper, const Frustum &) const
{
if (const auto count = instances.size()) {
const auto dimensions = bodyMesh->getDimensions();
diff --git a/game/scenary/foliage.h b/game/scenary/foliage.h
index 422c7aa..71bc734 100644
--- a/game/scenary/foliage.h
+++ b/game/scenary/foliage.h
@@ -25,7 +25,7 @@ public:
mutable InstanceVertices<LocationVertex> instances;
void render(const SceneShader &, const Frustum &) const override;
- void shadows(const ShadowMapper &) const override;
+ void shadows(const ShadowMapper &, const Frustum &) const override;
void updateStencil(const ShadowStenciller &) const override;
glTexture shadowStencil = ShadowStenciller::createStencilTexture(256, 256);
diff --git a/game/terrain.cpp b/game/terrain.cpp
index 577d9e5..e9e9463 100644
--- a/game/terrain.cpp
+++ b/game/terrain.cpp
@@ -128,7 +128,7 @@ Terrain::render(const SceneShader & shader, const Frustum & frustum) const
}
void
-Terrain::shadows(const ShadowMapper & shadowMapper) const
+Terrain::shadows(const ShadowMapper & shadowMapper, const Frustum &) const
{
shadowMapper.landmess.use();
for (const auto & [surface, sab] : meshes) {
diff --git a/game/terrain.h b/game/terrain.h
index 5f03634..eaec01d 100644
--- a/game/terrain.h
+++ b/game/terrain.h
@@ -17,7 +17,7 @@ public:
}
void render(const SceneShader & shader, const Frustum &) const override;
- void shadows(const ShadowMapper &) const override;
+ void shadows(const ShadowMapper &, const Frustum &) const override;
void tick(TickDuration) override;
diff --git a/game/vehicles/railVehicleClass.cpp b/game/vehicles/railVehicleClass.cpp
index 179b570..162a29a 100644
--- a/game/vehicles/railVehicleClass.cpp
+++ b/game/vehicles/railVehicleClass.cpp
@@ -47,7 +47,7 @@ RailVehicleClass::render(const SceneShader & shader, const Frustum &) const
}
void
-RailVehicleClass::shadows(const ShadowMapper & mapper) const
+RailVehicleClass::shadows(const ShadowMapper & mapper, const Frustum &) const
{
if (const auto count = static_cast<GLsizei>(instances.size())) {
mapper.dynamicPointInst.use();
diff --git a/game/vehicles/railVehicleClass.h b/game/vehicles/railVehicleClass.h
index 2c1fd2b..6eb4ca5 100644
--- a/game/vehicles/railVehicleClass.h
+++ b/game/vehicles/railVehicleClass.h
@@ -15,7 +15,7 @@ class Location;
class RailVehicleClass : public Renderable, public Asset {
public:
void render(const SceneShader & shader, const Frustum &) const override;
- void shadows(const ShadowMapper & shadowMapper) const override;
+ void shadows(const ShadowMapper & shadowMapper, const Frustum &) const override;
struct LocationVertex {
glm::mat3 body, front, back;
diff --git a/gfx/aabb.h b/gfx/aabb.h
index a661f66..ce15a0f 100644
--- a/gfx/aabb.h
+++ b/gfx/aabb.h
@@ -37,5 +37,5 @@ public:
}));
}
- V min, max;
+ V min {}, max {};
};
diff --git a/gfx/gl/sceneProvider.cpp b/gfx/gl/sceneProvider.cpp
index 4e271db..e01532e 100644
--- a/gfx/gl/sceneProvider.cpp
+++ b/gfx/gl/sceneProvider.cpp
@@ -9,6 +9,6 @@ SceneProvider::environment(const SceneShader &, const SceneRenderer & renderer)
}
void
-SceneProvider::shadows(const ShadowMapper &) const
+SceneProvider::shadows(const ShadowMapper &, const Frustum &) const
{
}
diff --git a/gfx/gl/sceneProvider.h b/gfx/gl/sceneProvider.h
index 93b384f..f6b7009 100644
--- a/gfx/gl/sceneProvider.h
+++ b/gfx/gl/sceneProvider.h
@@ -16,5 +16,5 @@ public:
virtual void content(const SceneShader &, const Frustum &) const = 0;
virtual void environment(const SceneShader &, const SceneRenderer &) const;
virtual void lights(const SceneShader &) const = 0;
- virtual void shadows(const ShadowMapper &) const;
+ virtual void shadows(const ShadowMapper &, const Frustum &) const;
};
diff --git a/gfx/gl/shadowMapper.cpp b/gfx/gl/shadowMapper.cpp
index 231f203..dc461e0 100644
--- a/gfx/gl/shadowMapper.cpp
+++ b/gfx/gl/shadowMapper.cpp
@@ -118,7 +118,14 @@ ShadowMapper::update(const SceneProvider & scene, const LightDirection & dir, co
&landmess, &dynamicPoint, &dynamicPointInst, &dynamicPointInstWithTextures, &stencilShadowProgram}) {
p->setView(out, sizes, lightViewPoint);
}
- scene.shadows(*this);
+ ExtentsBoundingBox extents;
+ for (const auto & point : bandViewExtents.back()) {
+ extents += point;
+ }
+ const auto lightProjection
+ = glm::ortho(extents.min.x, extents.max.x, extents.min.y, extents.max.y, -extents.max.z, -extents.min.z);
+ Frustum frustum {lightViewPoint, lightViewDir, lightProjection};
+ scene.shadows(*this, frustum);
glCullFace(GL_BACK);
diff --git a/gfx/renderable.cpp b/gfx/renderable.cpp
index 3594968..27f2459 100644
--- a/gfx/renderable.cpp
+++ b/gfx/renderable.cpp
@@ -6,7 +6,7 @@ Renderable::lights(const SceneShader &) const
}
void
-Renderable::shadows(const ShadowMapper &) const
+Renderable::shadows(const ShadowMapper &, const Frustum &) const
{
}
diff --git a/gfx/renderable.h b/gfx/renderable.h
index 9fbeccd..140c570 100644
--- a/gfx/renderable.h
+++ b/gfx/renderable.h
@@ -15,7 +15,7 @@ public:
virtual void render(const SceneShader & shader, const Frustum &) const = 0;
virtual void lights(const SceneShader & shader) const;
- virtual void shadows(const ShadowMapper & shadowMapper) const;
+ virtual void shadows(const ShadowMapper & shadowMapper, const Frustum &) const;
virtual void updateStencil(const ShadowStenciller & lightDir) const;
};
diff --git a/test/test-assetFactory.cpp b/test/test-assetFactory.cpp
index 02f0202..9bade82 100644
--- a/test/test-assetFactory.cpp
+++ b/test/test-assetFactory.cpp
@@ -58,10 +58,10 @@ public:
}
void
- shadows(const ShadowMapper & mapper) const override
+ shadows(const ShadowMapper & mapper, const Frustum & frustum) const override
{
mapper.dynamicPoint.use(Location {{0, 0, 0}, {0, 0, 0}});
- objects.apply(&Renderable::shadows, mapper);
+ objects.apply(&Renderable::shadows, mapper, frustum);
}
void
diff --git a/test/test-geoData.cpp b/test/test-geoData.cpp
index fb8b5c5..e3ef9ad 100644
--- a/test/test-geoData.cpp
+++ b/test/test-geoData.cpp
@@ -273,9 +273,9 @@ BOOST_DATA_TEST_CASE(deform, loadFixtureJson<DeformTerrainData>("geoData/deform/
}
void
- shadows(const ShadowMapper & shadowMapper) const override
+ shadows(const ShadowMapper & shadowMapper, const Frustum & frustum) const override
{
- terrain.shadows(shadowMapper);
+ terrain.shadows(shadowMapper, frustum);
}
};
diff --git a/test/test-render.cpp b/test/test-render.cpp
index 080e635..f205b89 100644
--- a/test/test-render.cpp
+++ b/test/test-render.cpp
@@ -92,12 +92,12 @@ public:
}
void
- shadows(const ShadowMapper & shadowMapper) const override
+ shadows(const ShadowMapper & shadowMapper, const Frustum & frustum) const override
{
- terrain->shadows(shadowMapper);
- std::ranges::for_each(gameState->assets, [&shadowMapper](const auto & asset) {
+ terrain->shadows(shadowMapper, frustum);
+ std::ranges::for_each(gameState->assets, [&shadowMapper, &frustum](const auto & asset) {
if (const auto renderable = std::dynamic_pointer_cast<const Renderable>(asset.second)) {
- renderable->shadows(shadowMapper);
+ renderable->shadows(shadowMapper, frustum);
}
});
}
@@ -190,9 +190,9 @@ BOOST_AUTO_TEST_CASE(terrain)
}
void
- shadows(const ShadowMapper & shadowMapper) const override
+ shadows(const ShadowMapper & shadowMapper, const Frustum & frustum) const override
{
- terrain->shadows(shadowMapper);
+ terrain->shadows(shadowMapper, frustum);
}
};
@@ -237,7 +237,7 @@ BOOST_AUTO_TEST_CASE(railnet)
}
void
- shadows(const ShadowMapper &) const override
+ shadows(const ShadowMapper &, const Frustum &) const override
{
}
};
diff --git a/ui/gameMainWindow.cpp b/ui/gameMainWindow.cpp
index 3403afa..f63137c 100644
--- a/ui/gameMainWindow.cpp
+++ b/ui/gameMainWindow.cpp
@@ -78,12 +78,12 @@ GameMainWindow::lights(const SceneShader & shader) const
}
void
-GameMainWindow::shadows(const ShadowMapper & shadowMapper) const
+GameMainWindow::shadows(const ShadowMapper & shadowMapper, const Frustum & frustum) const
{
for (const auto & [id, asset] : gameState->assets) {
if (const auto r = std::dynamic_pointer_cast<const Renderable>(asset)) {
- r->shadows(shadowMapper);
+ r->shadows(shadowMapper, frustum);
}
}
- gameState->world.apply<Renderable>(&Renderable::shadows, shadowMapper);
+ gameState->world.apply<Renderable>(&Renderable::shadows, shadowMapper, frustum);
}
diff --git a/ui/gameMainWindow.h b/ui/gameMainWindow.h
index 112d23b..43980e8 100644
--- a/ui/gameMainWindow.h
+++ b/ui/gameMainWindow.h
@@ -20,5 +20,5 @@ private:
void content(const SceneShader &, const Frustum &) const override;
void environment(const SceneShader &, const SceneRenderer &) const override;
void lights(const SceneShader &) const override;
- void shadows(const ShadowMapper &) const override;
+ void shadows(const ShadowMapper &, const Frustum &) const override;
};