From 89b8ffa013c10db57be14fbdd59757c08c243e18 Mon Sep 17 00:00:00 2001 From: Dan Goodliffe Date: Mon, 23 Feb 2026 17:35:48 +0000 Subject: Tidy the preFrame logic into a single function in SceneRenderer Clients now just call that one helper and SceneProvider passes in all the renderables. --- gfx/gl/sceneProvider.h | 4 ++++ gfx/gl/sceneRenderer.cpp | 11 ++++++++--- gfx/gl/sceneRenderer.h | 2 +- 3 files changed, 13 insertions(+), 4 deletions(-) (limited to 'gfx/gl') diff --git a/gfx/gl/sceneProvider.h b/gfx/gl/sceneProvider.h index f6b7009..e69885a 100644 --- a/gfx/gl/sceneProvider.h +++ b/gfx/gl/sceneProvider.h @@ -1,11 +1,13 @@ #pragma once +#include #include class SceneRenderer; class ShadowMapper; class SceneShader; class Frustum; +class Renderable; class SceneProvider { public: @@ -13,6 +15,8 @@ public: virtual ~SceneProvider() = default; DEFAULT_MOVE_COPY(SceneProvider); + using RenderableProcessor = std::function; + virtual void forEachRenderable(const RenderableProcessor &) const = 0; virtual void content(const SceneShader &, const Frustum &) const = 0; virtual void environment(const SceneShader &, const SceneRenderer &) const; virtual void lights(const SceneShader &) const = 0; diff --git a/gfx/gl/sceneRenderer.cpp b/gfx/gl/sceneRenderer.cpp index d005dfa..c1ec987 100644 --- a/gfx/gl/sceneRenderer.cpp +++ b/gfx/gl/sceneRenderer.cpp @@ -4,6 +4,7 @@ #include #include #include +#include #include static constexpr const std::array displayVAOdata {{ @@ -77,10 +78,14 @@ SceneRenderer::resize(ScreenAbsCoord newSize) shader.setViewPort({0, 0, size.x, size.y}); } -std::pair -SceneRenderer::preFrame(const LightDirection & lightDirection) +void +SceneRenderer::preFrame(const SceneProvider & scene, const LightDirection lightDirection) { - return {camera, shadowMapper.preFrame(lightDirection, camera)}; + glDebugScope _ {output}; + const auto lightView = shadowMapper.preFrame(lightDirection, camera); + scene.forEachRenderable([&lightView, this](Renderable * renderable) { + renderable->preFrame(camera, lightView); + }); } void diff --git a/gfx/gl/sceneRenderer.h b/gfx/gl/sceneRenderer.h index 2ec8057..d6f5dd1 100644 --- a/gfx/gl/sceneRenderer.h +++ b/gfx/gl/sceneRenderer.h @@ -17,8 +17,8 @@ public: void resize(ScreenAbsCoord size); + void preFrame(const SceneProvider & scene, LightDirection lightDirection); void render(const SceneProvider &) const; - std::pair preFrame(const LightDirection &); void setAmbientLight(const RGB & colour) const; void setDirectionalLight(const RGB & colour, const LightDirection & direction, const SceneProvider &) const; -- cgit v1.3