#ifndef SHADER_H #define SHADER_H #include "gl.h" class GLBaseShader { friend class GLShaderProgram; protected: void shader_source(const char *filename); void shader_source(std::string& filename); unsigned int shader; public: GLBaseShader(GLenum); ~GLBaseShader(); }; class GLVertexShader : public GLBaseShader { public: GLVertexShader() : GLBaseShader(GL_VERTEX_SHADER) {}; GLVertexShader(const char *s) : GLBaseShader(GL_VERTEX_SHADER) { shader_source(s); }; GLVertexShader(std::string& s) : GLBaseShader(GL_VERTEX_SHADER) { shader_source(s); }; }; class GLFragmentShader : public GLBaseShader { public: GLFragmentShader() : GLBaseShader(GL_FRAGMENT_SHADER) {}; GLFragmentShader(const char *s) : GLBaseShader(GL_FRAGMENT_SHADER) { shader_source(s); }; GLFragmentShader(std::string& s) : GLBaseShader(GL_FRAGMENT_SHADER) { shader_source(s); }; }; class GLShaderProgram { protected: unsigned int program; public: GLShaderProgram(); ~GLShaderProgram(); void attach(GLBaseShader&); void detach(GLBaseShader&); void link(); void use(); GLuint get_program(); }; #endif