diff options
Diffstat (limited to 'src/Shader.h')
-rw-r--r-- | src/Shader.h | 29 |
1 files changed, 26 insertions, 3 deletions
diff --git a/src/Shader.h b/src/Shader.h index 8111f0c..e1fdde9 100644 --- a/src/Shader.h +++ b/src/Shader.h @@ -21,19 +21,42 @@ #define ZOOM_SHADER_H_ #include "gl.h" + #include <string> +#include <boost/shared_ptr.hpp> namespace Zoom { class Shader { public: - static bool loadProgram(const std::string &vertexShader, const std::string &fragmentShader); + static boost::shared_ptr<Shader> load(const std::string &vertexShader, const std::string &fragmentShader); - private: - Shader(); + static void enable(boost::shared_ptr<Shader> shader) { + if(shader) + glUseProgramObjectARB(shader->handle); + else + glUseProgramObjectARB(0); + } + + static void disable() { + enable(boost::shared_ptr<Shader>()); + } + + ~Shader() { + glDeleteObjectARB(handle); + } + private: static GLhandleARB loadShader(const std::string &name, GLenum type); static void printInfoLog(GLhandleARB obj); + + Shader(GLhandleARB handle0) : handle(handle0) {} + + // Prevent shallow copy + Shader(const Shader &o); + Shader& operator=(const Shader &o); + + GLhandleARB handle; }; } |