From 5273a03417b0bb1b1f9f0baabee22466c8ea440c Mon Sep 17 00:00:00 2001 From: Dan Goodliffe Date: Wed, 4 Mar 2026 03:12:26 +0000 Subject: Update stencils and billboards less often No need to update these every frame when little of nothing has changed. Instead, track the angle previously rendered and updated only when the new angle has diverged sufficiently from this. Larger updates update more frequently. --- gfx/gl/shadowStenciller.cpp | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) (limited to 'gfx/gl/shadowStenciller.cpp') diff --git a/gfx/gl/shadowStenciller.cpp b/gfx/gl/shadowStenciller.cpp index 7a0fc9b..19c8bef 100644 --- a/gfx/gl/shadowStenciller.cpp +++ b/gfx/gl/shadowStenciller.cpp @@ -10,7 +10,7 @@ #include ShadowStenciller::ShadowStenciller() : - shadowCaster {shadowStencil_vert, shadowStencil_geom, shadowStencil_frag}, viewProjections {} + shadowCaster {shadowStencil_vert, shadowStencil_geom, shadowStencil_frag}, lightDir {}, viewProjections {} { glDebugScope _ {fbo}; glBindFramebuffer(GL_FRAMEBUFFER, fbo); @@ -22,6 +22,7 @@ ShadowStenciller::ShadowStenciller() : void ShadowStenciller::setLightDirection(const LightDirection & lightDir) { + this->lightDir = lightDir.position(); viewProjections = [&lightDir](std::integer_sequence) { constexpr float STEP = two_pi / STENCIL_ANGLES; return std::array {rotate_pitch<4>(half_pi - lightDir.position().y) @@ -29,6 +30,12 @@ ShadowStenciller::setLightDirection(const LightDirection & lightDir) }(std::make_integer_sequence>()); } +Direction2D +ShadowStenciller::getLightDirection() const +{ + return lightDir; +} + glTexture ShadowStenciller::createStencilTexture(GLsizei width, GLsizei height) { -- cgit v1.3