#ifndef SPECTRE_GFXDRIVER_OPENGL_OPENGLSHADERPROGRAM_H #define SPECTRE_GFXDRIVER_OPENGL_OPENGLSHADERPROGRAM_H #include #include namespace sp { class OpenGLShaderProgram : public ShaderProgram { public: OpenGLShaderProgram(); virtual ~OpenGLShaderProgram(); // Load a shader from memory. virtual bool loadFromMemory(const std::string& source, ShaderType type); // Link the program. virtual bool link(); // Enable this shader // All shader operations after this call will affect this shader. virtual void enable() const; // Disable this shader // Operations will no longer affect this shader after this call. virtual void disable() const; // --------------------- // Variables. // --------------------- virtual bool setMVPMatrix(const Matrix4f& matrix); // --------------------- // General Variables. // --------------------- virtual bool setAttribute(const std::string& name, float value) const; virtual bool setAttribute(const std::string& name, const Matrix4f& matrix) const; virtual bool setUniform(const std::string& name, const Matrix4f& matrix) const; virtual bool setUniform(const std::string& name, const Color& color) const; protected : // Compile a shader. bool compileShader(GLuint id); // Attach shader to program. bool attachShader(GLuint id); bool getAttribLoc(const std::string& name, int& loc) const; bool getUniformLoc(const std::string& name, int& loc) const; std::string fetchErrorLog() const; protected : // Program ID GLuint m_id; }; } // namespace sp #endif /* SPECTRE_GFXDRIVER_OPENGL_OPENGLSHADERPROGRAM_H */