From e360e95dcbdc8868e50cfb515942d796619aca21 Mon Sep 17 00:00:00 2001 From: Dan Goodliffe Date: Wed, 17 Feb 2021 01:01:55 +0000 Subject: Support multiple shader programs, set by model --- gfx/gl/shader.h | 19 ++++++++++++++----- 1 file changed, 14 insertions(+), 5 deletions(-) (limited to 'gfx/gl/shader.h') diff --git a/gfx/gl/shader.h b/gfx/gl/shader.h index a839b9b..98e0348 100644 --- a/gfx/gl/shader.h +++ b/gfx/gl/shader.h @@ -2,17 +2,20 @@ #define SHADER_INCLUDED_H #include +#include #include #include #include class Shader { public: + enum class Program { Basic = 0 }; + Shader(); - void Bind() const; void setView(glm::mat4 view) const; - void setModel(glm::mat4 model) const; + void setModel(glm::mat4 model, Program = Program::Basic) const; + void setLight(glm::vec3 dir) const; private: class Source { @@ -27,10 +30,16 @@ private: static void CheckShaderError(GLuint shader, GLuint flag, bool isProgram, std::string_view errorMessage); - using ProgramRef = glRef; + class ProgramHandle { + public: + ProgramHandle(std::initializer_list); + using ProgramRef = glRef; + + ProgramRef m_program; + GLint viewProjection_uniform, model_uniform, lightDir_uniform; + }; - ProgramRef m_program; - GLint viewProjection_uniform, model_uniform, lightDir_uniform; + std::array programs; }; #endif -- cgit v1.2.3