From 4e1e30a5e5edfe36410e3da095ad98e181a29ce9 Mon Sep 17 00:00:00 2001 From: Dan Goodliffe Date: Sun, 12 Dec 2021 16:00:54 +0000 Subject: Split 3D specifics of programs out of a base class --- gfx/gl/shader.cpp | 13 ++++++++----- gfx/gl/shader.h | 15 ++++++++++----- 2 files changed, 18 insertions(+), 10 deletions(-) (limited to 'gfx') diff --git a/gfx/gl/shader.cpp b/gfx/gl/shader.cpp index 06edc5c..12ab510 100644 --- a/gfx/gl/shader.cpp +++ b/gfx/gl/shader.cpp @@ -16,20 +16,23 @@ #include #include -Shader::ProgramHandle::ProgramHandle(GLuint vs, GLuint fs) : viewProjection_uniform {}, model_uniform {} +ProgramHandleBase::ProgramHandleBase(GLuint vs, GLuint fs) : viewProjection_uniform {}, model_uniform {} { glAttachShader(m_program, vs); glAttachShader(m_program, fs); - glBindAttribLocation(m_program, 0, "position"); - glBindAttribLocation(m_program, 1, "texCoord"); - glBindAttribLocation(m_program, 2, "normal"); - glLinkProgram(m_program); GLsource::CheckShaderError(m_program, GL_LINK_STATUS, true, "Error linking shader program"); glValidateProgram(m_program); GLsource::CheckShaderError(m_program, GL_VALIDATE_STATUS, true, "Invalid shader program"); +} + +Shader::ProgramHandle::ProgramHandle(GLuint vs, GLuint fs) : ProgramHandleBase {vs, fs} +{ + glBindAttribLocation(m_program, 0, "position"); + glBindAttribLocation(m_program, 1, "texCoord"); + glBindAttribLocation(m_program, 2, "normal"); viewProjection_uniform = glGetUniformLocation(m_program, "viewProjection"); model_uniform = glGetUniformLocation(m_program, "model"); diff --git a/gfx/gl/shader.h b/gfx/gl/shader.h index 3ee9449..5b3aab8 100644 --- a/gfx/gl/shader.h +++ b/gfx/gl/shader.h @@ -9,6 +9,15 @@ class Location; +class ProgramHandleBase { +public: + ProgramHandleBase(GLuint, GLuint); + using ProgramRef = glRef; + + ProgramRef m_program; + GLint viewProjection_uniform, model_uniform; +}; + class Shader { public: enum class Program { Basic = 0, Water = 1, LandMass = 2, StaticPos = 3 }; @@ -20,13 +29,9 @@ public: void setUniform(const GLchar *, glm::vec3 dir) const; private: - class ProgramHandle { + class ProgramHandle : public ProgramHandleBase { public: ProgramHandle(GLuint, GLuint); - using ProgramRef = glRef; - - ProgramRef m_program; - GLint viewProjection_uniform, model_uniform; }; std::array programs; -- cgit v1.2.3