summaryrefslogtreecommitdiff
path: root/gfx/gl/shadowMapper.h
diff options
context:
space:
mode:
Diffstat (limited to 'gfx/gl/shadowMapper.h')
-rw-r--r--gfx/gl/shadowMapper.h31
1 files changed, 20 insertions, 11 deletions
diff --git a/gfx/gl/shadowMapper.h b/gfx/gl/shadowMapper.h
index 951e29c..f0356b9 100644
--- a/gfx/gl/shadowMapper.h
+++ b/gfx/gl/shadowMapper.h
@@ -1,13 +1,14 @@
#pragma once
#include "config/types.h"
+#include "gfx/frustum.h"
#include "gfx/gl/shadowStenciller.h"
#include "lib/glArrays.h"
#include "program.h"
+#include <array>
#include <gfx/models/texture.h>
#include <glm/vec2.hpp>
#include <span>
-#include <vector>
class SceneProvider;
class Camera;
@@ -19,10 +20,12 @@ public:
static constexpr std::size_t SHADOW_BANDS {4};
- using Definitions = std::vector<glm::mat4x4>;
- using Sizes = std::vector<RelativePosition3D>;
+ using Definitions = std::array<glm::mat4, SHADOW_BANDS>;
+ using Sizes = std::array<RelativePosition3D, SHADOW_BANDS>;
- [[nodiscard]] Definitions update(const SceneProvider &, const LightDirection & direction, const Camera &) const;
+ const Frustum & preFrame(const LightDirection & direction, const Camera &);
+ [[nodiscard]] std::span<const glm::mat4> update(
+ const SceneProvider &, const LightDirection & direction, const Camera &) const;
class ShadowProgram : public Program {
public:
@@ -65,17 +68,23 @@ public:
DynamicPoint dynamicPoint;
StencilShadowProgram stencilShadowProgram;
- // NOLINTNEXTLINE(hicpp-explicit-conversions)
- operator GLuint() const
+ void
+ bind(GLenum unit) const
{
- return depthMap;
+ depthMap.bind(unit);
}
private:
- [[nodiscard]] static std::vector<std::array<RelativePosition3D, 4>> getBandViewExtents(
- const Camera &, const glm::mat4 & lightView);
- glFrameBuffer depthMapFBO;
- glTexture depthMap;
+ using BandViewExtents = std::array<std::array<RelativePosition3D, 4>, SHADOW_BANDS + 1>;
+ [[nodiscard]] static size_t getBandViewExtents(BandViewExtents &, const Camera &, const glm::mat4 & lightView);
+ glFramebuffer depthMapFBO;
+ glTexture<GL_TEXTURE_2D_ARRAY> depthMap;
TextureAbsCoord size;
+
+ BandViewExtents bandViewExtents;
+ Definitions definitions;
+ Sizes sizes;
+ Frustum frustum;
+
mutable ShadowStenciller shadowStenciller;
};