#ifndef SPECTRE_GFXDRIVER_SHADERPROGRAM_H #define SPECTRE_GFXDRIVER_SHADERPROGRAM_H #include #include namespace sp { enum ShaderType { Vertex, Fragment }; class ShaderProgram { public: virtual ~ShaderProgram(); // Load a shader program from file. virtual bool loadFromFile(const std::string& filename); // Load a shader from file. virtual bool loadFromFile(const std::string& filename, ShaderType type); // Load a shader from memory. virtual bool loadFromMemory(const std::string& source, ShaderType type) = 0; // Link the program. virtual bool link() = 0; // Returns true if the program was linked successfully virtual bool isLinked() const; // Enable this shader // All shader operations after this call will affect this shader. virtual void enable() const = 0; // Disable this shader // Operations will no longer affect this shader after this call. virtual void disable() const = 0; // Get the last shader error. virtual std::string getLastError() const; // --------------------- // Variables. // --------------------- // TODO: Move this to a ShaderParameter class virtual bool setMVPMatrix(const Matrix4f& matrix) = 0; // --------------------- // General Variables. // --------------------- virtual bool setAttribute(const std::string& name, float value) const = 0; virtual bool setAttribute(const std::string& name, const Matrix4f& matrix) const = 0; virtual bool setUniform(const std::string& name, const Matrix4f& matrix) const = 0; virtual bool setUniform(const std::string& name, const Color& color) const = 0; protected: std::string m_extension; mutable std::string m_error; bool m_linked; }; } // namespace sp #endif /* SECTRE_GRAPHICS_SHADERPROGRAM_H */