summaryrefslogtreecommitdiffstats
path: root/src/Shader.h
diff options
context:
space:
mode:
authorMatthias Schiffer <matthias@gamezock.de>2009-12-18 13:31:07 +0100
committerMatthias Schiffer <matthias@gamezock.de>2009-12-18 13:31:07 +0100
commit4e3efa239c9bcb5dd26b4ad9a4d43d4d6a266e6f (patch)
treee39e9698513687a3213ecae7eab942bce88b12d6 /src/Shader.h
parentb3b74dc2afe4c67a6b74c2a681aa7bbad7077511 (diff)
downloadzoom++-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.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;
};
}