diff options
author | Matthias Schiffer <matthias@gamezock.de> | 2009-12-18 13:31:07 +0100 |
---|---|---|
committer | Matthias Schiffer <matthias@gamezock.de> | 2009-12-18 13:31:07 +0100 |
commit | 4e3efa239c9bcb5dd26b4ad9a4d43d4d6a266e6f (patch) | |
tree | e39e9698513687a3213ecae7eab942bce88b12d6 /src/Shader.h | |
parent | b3b74dc2afe4c67a6b74c2a681aa7bbad7077511 (diff) | |
download | zoom++-4e3efa239c9bcb5dd26b4ad9a4d43d4d6a266e6f.tar zoom++-4e3efa239c9bcb5dd26b4ad9a4d43d4d6a266e6f.zip |
Use multi-pass rendering with seperate ambient and light shaders
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; }; } |