From e84ac56e353dad9fe62f960b2e6f08bceb275ad9 Mon Sep 17 00:00:00 2001 From: sfan5 Date: Sat, 1 Mar 2025 00:58:33 +0100 Subject: [PATCH] Don't try to update uninitialized shadow frustum --- src/client/shadows/dynamicshadows.cpp | 4 +++- src/client/shadows/dynamicshadows.h | 1 - 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/src/client/shadows/dynamicshadows.cpp b/src/client/shadows/dynamicshadows.cpp index 92aa9f893..826e87d82 100644 --- a/src/client/shadows/dynamicshadows.cpp +++ b/src/client/shadows/dynamicshadows.cpp @@ -32,6 +32,7 @@ void DirectionalLight::createSplitMatrices(const Camera *cam) // adjusted frustum boundaries float sfNear = future_frustum.zNear; float sfFar = adjustDist(future_frustum.zFar, cam->getFovY()); + assert(sfFar - sfNear > 0); // adjusted camera positions v3f cam_pos_world = cam->getPosition(); @@ -74,7 +75,6 @@ void DirectionalLight::createSplitMatrices(const Camera *cam) future_frustum.ViewMat.buildCameraLookAtMatrixLH(eye, center_scene, v3f(0.0f, 1.0f, 0.0f)); future_frustum.ProjOrthMat.buildProjectionMatrixOrthoLH(radius, radius, 0.0f, length, false); - future_frustum.camera_offset = cam->getOffset(); } DirectionalLight::DirectionalLight(const u32 shadowMapResolution, @@ -86,6 +86,8 @@ DirectionalLight::DirectionalLight(const u32 shadowMapResolution, void DirectionalLight::updateCameraOffset(const Camera *cam) { + if (future_frustum.zFar == 0.0f) // not initialized + return; createSplitMatrices(cam); should_update_map_shadow = true; dirty = true; diff --git a/src/client/shadows/dynamicshadows.h b/src/client/shadows/dynamicshadows.h index 70135ea69..1d741b0a3 100644 --- a/src/client/shadows/dynamicshadows.h +++ b/src/client/shadows/dynamicshadows.h @@ -22,7 +22,6 @@ struct shadowFrustum core::matrix4 ViewMat; v3f position; v3f player; - v3s16 camera_offset; }; class DirectionalLight