diff options
Diffstat (limited to 'gfx/gl/shadowMapper.h')
| -rw-r--r-- | gfx/gl/shadowMapper.h | 31 |
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; }; |
