summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gfx/gl/sceneShader.cpp19
-rw-r--r--gfx/gl/sceneShader.h3
2 files changed, 14 insertions, 8 deletions
diff --git a/gfx/gl/sceneShader.cpp b/gfx/gl/sceneShader.cpp
index bc64a88..2dd9612 100644
--- a/gfx/gl/sceneShader.cpp
+++ b/gfx/gl/sceneShader.cpp
@@ -23,6 +23,15 @@
#include <location.h>
#include <maths.h>
+inline void
+SceneShader::allPrograms(auto member, auto &&... ps) const
+{
+ for (const auto & prog : std::initializer_list<const SceneProgram *> {&basic, &basicInst, &water, &landmass,
+ &absolute, &pointLightInst, &spotLightInst, &networkStraight, &networkCurve}) {
+ (prog->*member)(std::forward<decltype(ps)>(ps)...);
+ }
+}
+
SceneShader::SceneShader() :
basicInst {dynamicPointInst_vs, material_fs}, landmass {fixedPoint_vs, landmass_fs},
absolute {fixedPoint_vs, material_fs}, spotLightInst {spotLight_vs, spotLight_gs, spotLight_fs},
@@ -35,19 +44,13 @@ SceneShader::SceneShader() :
void
SceneShader::setViewProjection(const GlobalPosition3D & viewPoint, const glm::mat4 & viewProjection) const
{
- for (const auto & prog : std::initializer_list<const SceneProgram *> {&basic, &basicInst, &water, &landmass,
- &absolute, &pointLightInst, &spotLightInst, &networkStraight, &networkCurve}) {
- prog->setViewProjection(viewPoint, viewProjection);
- }
+ allPrograms(&SceneProgram::setViewProjection, viewPoint, viewProjection);
}
void
SceneShader::setViewPort(const ViewPort & viewPort) const
{
- for (const auto & prog : std::initializer_list<const SceneProgram *> {&basic, &basicInst, &water, &landmass,
- &absolute, &pointLightInst, &spotLightInst, &networkStraight, &networkCurve}) {
- prog->setViewPort(viewPort);
- }
+ allPrograms(&SceneProgram::setViewPort, viewPort);
}
void
diff --git a/gfx/gl/sceneShader.h b/gfx/gl/sceneShader.h
index 8621442..07b0b26 100644
--- a/gfx/gl/sceneShader.h
+++ b/gfx/gl/sceneShader.h
@@ -71,4 +71,7 @@ public:
void setViewProjection(const GlobalPosition3D & viewPoint, const glm::mat4 & viewProjection) const;
void setViewPort(const ViewPort & viewPort) const;
+
+private:
+ inline void allPrograms(auto member, auto &&... ps) const;
};