diff options
author | Dan Goodliffe <dan@randomdan.homeip.net> | 2025-03-10 02:12:16 +0000 |
---|---|---|
committer | Dan Goodliffe <dan@randomdan.homeip.net> | 2025-03-11 01:13:59 +0000 |
commit | 194148abd9ab89a5a514a37b7717b7c4de6aa758 (patch) | |
tree | 5163df40e57c4c55b4a6035e699572bd55b0d7cf /gfx | |
parent | Simplify ShadowMapper with AxisAlignedBoundingBox (diff) | |
download | ilt-194148abd9ab89a5a514a37b7717b7c4de6aa758.tar.bz2 ilt-194148abd9ab89a5a514a37b7717b7c4de6aa758.tar.xz ilt-194148abd9ab89a5a514a37b7717b7c4de6aa758.zip |
Pass a Frustum to shadow renderers
The frustum might not be correct at this stage.
Diffstat (limited to 'gfx')
-rw-r--r-- | gfx/aabb.h | 2 | ||||
-rw-r--r-- | gfx/gl/sceneProvider.cpp | 2 | ||||
-rw-r--r-- | gfx/gl/sceneProvider.h | 2 | ||||
-rw-r--r-- | gfx/gl/shadowMapper.cpp | 9 | ||||
-rw-r--r-- | gfx/renderable.cpp | 2 | ||||
-rw-r--r-- | gfx/renderable.h | 2 |
6 files changed, 13 insertions, 6 deletions
@@ -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; }; |