summaryrefslogtreecommitdiffstats
path: root/src/Shader.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/Shader.h')
-rw-r--r--src/Shader.h29
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;
};
}