summaryrefslogtreecommitdiff
path: root/gfx
diff options
context:
space:
mode:
authorDan Goodliffe <dan@randomdan.homeip.net>2024-01-29 00:18:02 +0000
committerDan Goodliffe <dan@randomdan.homeip.net>2024-01-29 00:18:02 +0000
commita18ea136a540d271687fd88831bc14394107dba5 (patch)
tree05eb6b5a4a9e77240e572c62b5a1d455008e966e /gfx
parentGeometry shader for single pass shadow maps (diff)
downloadilt-a18ea136a540d271687fd88831bc14394107dba5.tar.bz2
ilt-a18ea136a540d271687fd88831bc14394107dba5.tar.xz
ilt-a18ea136a540d271687fd88831bc14394107dba5.zip
Merge common parts of shadow programs into a base class
Diffstat (limited to 'gfx')
-rw-r--r--gfx/gl/shadowMapper.cpp49
-rw-r--r--gfx/gl/shadowMapper.h17
2 files changed, 23 insertions, 43 deletions
diff --git a/gfx/gl/shadowMapper.cpp b/gfx/gl/shadowMapper.cpp
index 7770c9d..4141278 100644
--- a/gfx/gl/shadowMapper.cpp
+++ b/gfx/gl/shadowMapper.cpp
@@ -18,8 +18,7 @@
#include <vector>
ShadowMapper::ShadowMapper(const TextureAbsCoord & s) :
- fixedPoint {shadowFixedPoint_vs, commonShadowPoint_gs},
- dynamicPointInst {shadowDynamicPointInst_vs, commonShadowPoint_gs}, size {s}
+ fixedPoint {shadowFixedPoint_vs}, dynamicPointInst {shadowDynamicPointInst_vs}, size {s}
{
glBindTexture(GL_TEXTURE_2D_ARRAY, depthMap);
glTexImage3D(
@@ -169,19 +168,19 @@ ShadowMapper::update(const SceneProvider & scene, const Direction3D & dir, const
return out;
}
-ShadowMapper::FixedPoint::FixedPoint(const Shader & vs, const Shader & gs) :
- Program {vs, gs}, viewProjectionLoc {{
- {*this, "viewProjection[0]"},
- {*this, "viewProjection[1]"},
- {*this, "viewProjection[2]"},
- {*this, "viewProjection[3]"},
- }},
+ShadowMapper::ShadowProgram::ShadowProgram(const Shader & vs) :
+ Program {vs, commonShadowPoint_gs}, viewProjectionLoc {{
+ {*this, "viewProjection[0]"},
+ {*this, "viewProjection[1]"},
+ {*this, "viewProjection[2]"},
+ {*this, "viewProjection[3]"},
+ }},
viewProjectionsLoc {*this, "viewProjections"}, viewPointLoc {*this, "viewPoint"}
{
}
void
-ShadowMapper::FixedPoint::setViewPoint(const GlobalPosition3D viewPoint, size_t n) const
+ShadowMapper::ShadowProgram::setViewPoint(const GlobalPosition3D viewPoint, size_t n) const
{
use();
glUniform(viewPointLoc, viewPoint);
@@ -189,43 +188,23 @@ ShadowMapper::FixedPoint::setViewPoint(const GlobalPosition3D viewPoint, size_t
}
void
-ShadowMapper::FixedPoint::setViewProjection(const glm::mat4 & viewProjection, size_t n) const
+ShadowMapper::ShadowProgram::setViewProjection(const glm::mat4 & viewProjection, size_t n) const
{
use();
glUniform(viewProjectionLoc[n], viewProjection);
}
void
-ShadowMapper::FixedPoint::use() const
+ShadowMapper::ShadowProgram::use() const
{
glUseProgram(*this);
}
-ShadowMapper::DynamicPoint::DynamicPoint() :
- Program {shadowDynamicPoint_vs, commonShadowPoint_gs}, viewProjectionLoc {{
- {*this, "viewProjection[0]"},
- {*this, "viewProjection[1]"},
- {*this, "viewProjection[2]"},
- {*this, "viewProjection[3]"},
- }},
- viewProjectionsLoc {*this, "viewProjections"}, viewPointLoc {*this, "viewPoint"}, modelLoc {*this, "model"},
- modelPosLoc {*this, "modelPos"}
-{
-}
-
-void
-ShadowMapper::DynamicPoint::setViewPoint(const GlobalPosition3D viewPoint, size_t n) const
-{
- glUseProgram(*this);
- glUniform(viewPointLoc, viewPoint);
- glUniform(viewProjectionsLoc, static_cast<GLint>(n));
-}
+ShadowMapper::FixedPoint::FixedPoint(const Shader & vs) : ShadowProgram {vs} { }
-void
-ShadowMapper::DynamicPoint::setViewProjection(const glm::mat4 & viewProjection, size_t n) const
+ShadowMapper::DynamicPoint::DynamicPoint() :
+ ShadowProgram {shadowDynamicPoint_vs}, modelLoc {*this, "model"}, modelPosLoc {*this, "modelPos"}
{
- glUseProgram(*this);
- glUniform(viewProjectionLoc[n], viewProjection);
}
void
diff --git a/gfx/gl/shadowMapper.h b/gfx/gl/shadowMapper.h
index 421e6a5..4f81e58 100644
--- a/gfx/gl/shadowMapper.h
+++ b/gfx/gl/shadowMapper.h
@@ -24,9 +24,10 @@ public:
[[nodiscard]] Definitions update(const SceneProvider &, const Direction3D & direction, const Camera &) const;
- class FixedPoint : public Program {
+ class ShadowProgram : public Program {
public:
- FixedPoint(const Shader & vs, const Shader & gs);
+ explicit ShadowProgram(const Shader & vs);
+
void setViewPoint(const GlobalPosition3D, size_t n) const;
void setViewProjection(const glm::mat4 &, size_t n) const;
void use() const;
@@ -37,18 +38,18 @@ public:
RequiredUniformLocation viewPointLoc;
};
- class DynamicPoint : public Program {
+ class FixedPoint : public ShadowProgram {
+ public:
+ explicit FixedPoint(const Shader & vs);
+ };
+
+ class DynamicPoint : public ShadowProgram {
public:
DynamicPoint();
- void setViewPoint(const GlobalPosition3D, size_t n) const;
- void setViewProjection(const glm::mat4 &, size_t n) const;
void use(const Location &) const;
void setModel(const Location &) const;
private:
- std::array<RequiredUniformLocation, 4> viewProjectionLoc;
- RequiredUniformLocation viewProjectionsLoc;
- RequiredUniformLocation viewPointLoc;
RequiredUniformLocation modelLoc;
RequiredUniformLocation modelPosLoc;
};