diff options
author | Dan Goodliffe <dan@randomdan.homeip.net> | 2022-12-28 19:36:00 +0000 |
---|---|---|
committer | Dan Goodliffe <dan@randomdan.homeip.net> | 2022-12-28 19:36:00 +0000 |
commit | 66047d123769245e3b5cb8bbe748aefb13db16d4 (patch) | |
tree | 5224d291d80726c44fccf21ec185430b634316a6 /gfx/gl/shadowMapper.cpp | |
parent | Generate a single shadow band and region definition (diff) | |
download | ilt-66047d123769245e3b5cb8bbe748aefb13db16d4.tar.bz2 ilt-66047d123769245e3b5cb8bbe748aefb13db16d4.tar.xz ilt-66047d123769245e3b5cb8bbe748aefb13db16d4.zip |
Generate 4 bands of shadow maps
Diffstat (limited to 'gfx/gl/shadowMapper.cpp')
-rw-r--r-- | gfx/gl/shadowMapper.cpp | 28 |
1 files changed, 20 insertions, 8 deletions
diff --git a/gfx/gl/shadowMapper.cpp b/gfx/gl/shadowMapper.cpp index b41a53b..f1beb82 100644 --- a/gfx/gl/shadowMapper.cpp +++ b/gfx/gl/shadowMapper.cpp @@ -33,17 +33,29 @@ ShadowMapper::ShadowMapper(const glm::ivec2 & s) : size {s} glBindFramebuffer(GL_FRAMEBUFFER, 0); } -constexpr std::array<glm::ivec4, 1> viewports {{ - {31, 31, 0, 0}, +constexpr std::array<glm::ivec4, ShadowMapper::SHADOW_BANDS> viewports {{ + {31, 31, 1, 1}, + {1, 31, 1, 1}, + {31, 1, 1, 1}, + {1, 1, 1, 1}, }}; -constexpr std::array<glm::vec4, 1> shadowMapRegions { - {{0.5F, 0.5F, 0.5F, 0.5F}}, +constexpr std::array<glm::vec4, ShadowMapper::SHADOW_BANDS> shadowMapRegions {{ + {0.25F, 0.25F, 0.25F, 0.25F}, + {0.25F, 0.25F, 0.75F, 0.25F}, + {0.25F, 0.25F, 0.25F, 0.75F}, + {0.25F, 0.25F, 0.75F, 0.75F}, +}}; +constexpr std::array<float, ShadowMapper::SHADOW_BANDS + 1> shadowBands { + 1.F, + 250.F, + 750.F, + 2500.F, + 10000.F, }; -constexpr std::array shadowBands {1.F, 1000.F}; static_assert(viewports.size() == shadowMapRegions.size()); static_assert(shadowBands.size() == shadowMapRegions.size() + 1); -ShadowMapper::Definitions<1> +ShadowMapper::Definitions<ShadowMapper::SHADOW_BANDS> ShadowMapper::update(const SceneProvider & scene, const glm::vec3 & dir, const Camera & camera) const { glBindFramebuffer(GL_FRAMEBUFFER, depthMapFBO); @@ -61,8 +73,8 @@ ShadowMapper::update(const SceneProvider & scene, const glm::vec3 & dir, const C for (auto & e : viewExtents) { e = lightView * glm::vec4(e, 1); } - Definitions<1> out; - for (std::size_t band = 0; band < viewports.size(); ++band) { + Definitions<SHADOW_BANDS> out; + for (std::size_t band = 0; band < SHADOW_BANDS; ++band) { const auto extents_minmax = [extents = viewExtents.subspan(band * 4, 8)](auto && comp) { const auto mm = std::minmax_element(extents.begin(), extents.end(), comp); return std::make_pair(comp.get(*mm.first), comp.get(*mm.second)); |