diff options
Diffstat (limited to 'gfx')
| -rw-r--r-- | gfx/gl/sceneProvider.h | 4 | ||||
| -rw-r--r-- | gfx/gl/sceneRenderer.cpp | 11 | ||||
| -rw-r--r-- | gfx/gl/sceneRenderer.h | 2 |
3 files changed, 13 insertions, 4 deletions
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 <functional> #include <special_members.h> 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<void(Renderable *)>; + 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 <gfx/gl/shaders/directionalLight-frag.h> #include <gfx/gl/shaders/lighting-frag.h> #include <gfx/gl/shaders/lighting-vert.h> +#include <gfx/renderable.h> #include <glm/gtc/type_ptr.hpp> static constexpr const std::array<const glm::i8vec4, 4> displayVAOdata {{ @@ -77,10 +78,14 @@ SceneRenderer::resize(ScreenAbsCoord newSize) shader.setViewPort({0, 0, size.x, size.y}); } -std::pair<const Frustum &, const Frustum &> -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<const Frustum &, const Frustum &> preFrame(const LightDirection &); void setAmbientLight(const RGB & colour) const; void setDirectionalLight(const RGB & colour, const LightDirection & direction, const SceneProvider &) const; |
