summaryrefslogtreecommitdiff
path: root/gfx
diff options
context:
space:
mode:
Diffstat (limited to 'gfx')
-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
6 files changed, 13 insertions, 6 deletions
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;
};