From c3eea71370eb94cff1fd96185458643fab6eb2c5 Mon Sep 17 00:00:00 2001 From: Dan Goodliffe Date: Thu, 3 Nov 2022 19:47:46 +0000 Subject: Restructure how shaders are worked with Needs a tidy-up --- gfx/gl/sceneShader.h | 81 ++++++++++++++++++++++++++++++++++------------------ 1 file changed, 54 insertions(+), 27 deletions(-) (limited to 'gfx/gl/sceneShader.h') diff --git a/gfx/gl/sceneShader.h b/gfx/gl/sceneShader.h index 61c159b..a85e55b 100644 --- a/gfx/gl/sceneShader.h +++ b/gfx/gl/sceneShader.h @@ -1,27 +1,54 @@ -#pragma once - -#include "programHandle.h" -#include -#include -#include - -class Location; - -class SceneShader { -public: - enum class Program { Basic = 0, Water = 1, LandMass = 2, StaticPos = 3 }; - - SceneShader(); - - void setView(glm::mat4 view) const; - void setModel(const Location &, Program = Program::Basic) const; - void setUniform(const GLchar *, glm::vec3 dir) const; - -private: - class ProgramHandle : public ProgramHandleBase { - public: - ProgramHandle(GLuint, GLuint); - }; - - std::array programs; -}; +#pragma once + +#include "program.h" + +class Location; + +struct SceneShader { + class SceneProgram : public Program { + public: + template + inline SceneProgram(const S &... srcs) : Program {srcs...}, viewProjectionLoc {*this, "viewProjection"} + { + } + + void setView(const glm::mat4 &) const; + + private: + RequiredUniformLocation viewProjectionLoc; + }; + + class BasicProgram : public SceneProgram { + public: + BasicProgram(); + void setModel(const Location &) const; + void use(const Location &) const; + + private: + RequiredUniformLocation modelLoc; + }; + + class AbsolutePosProgram : public SceneProgram { + public: + using Program::use; + using SceneProgram::SceneProgram; + }; + + class WaterProgram : public SceneProgram { + public: + public: + WaterProgram(); + void use(float waveCycle) const; + + private: + RequiredUniformLocation waveLoc; + }; + + SceneShader(); + + BasicProgram basic; + WaterProgram water; + AbsolutePosProgram landmass, absolute; + + void setView(glm::mat4 proj) const; +}; -- cgit v1.2.3