00001 #ifndef __UNIFORM_GLSL__
00002 #define __UNIFORM_GLSL__
00003
00004 #include <OpenGL.h>
00005 #include <QString>
00006
00007 namespace apig {
00008
00009
00010 class UniformGLSL {
00011 public:
00012 UniformGLSL(QString name, GLuint prog) {
00013 id = glGetUniformLocation(prog, name.toAscii().constData());
00014 valid = (id != -1);
00015 }
00016
00017 inline bool exists() const { return valid; }
00018
00019 inline void setUniform1i(int v) const { glUniform1i(id, v); }
00020 inline void setUniform2i(int v0, int v1) const { glUniform2i(id, v0, v1); }
00021 inline void setUniform3i(int v0, int v1, int v2) const { glUniform3i(id, v0, v1, v2); }
00022 inline void setUniform4i(int v0, int v1, int v2, int v3) const { glUniform4i(id, v0, v1, v2, v3); }
00023 inline void setUniform1iv(const int *v) const { glUniform1iv(id, 1, v); }
00024 inline void setUniform2iv(const int *v) const { glUniform2iv(id, 1, v); }
00025 inline void setUniform3iv(const int *v) const { glUniform3iv(id, 1, v); }
00026 inline void setUniform4iv(const int *v) const { glUniform4iv(id, 1, v); }
00027
00028 inline void setUniform1f(float v) const { glUniform1f(id, v); }
00029 inline void setUniform2f(float v0, float v1) const { glUniform2f(id, v0, v1); }
00030 inline void setUniform3f(float v0, float v1, float v2) const { glUniform3f(id, v0, v1, v2); }
00031 inline void setUniform4f(float v0, float v1, float v2, float v3) const { glUniform4f(id, v0, v1, v2, v3); }
00032 inline void setUniform1fv(const float *v) const { glUniform1fv(id, 1, v); }
00033 inline void setUniform2fv(const float *v) const { glUniform2fv(id, 1, v); }
00034 inline void setUniform3fv(const float *v) const { glUniform3fv(id, 1, v); }
00035 inline void setUniform4fv(const float *v) const { glUniform4fv(id, 1, v); }
00036
00037 inline void setUniformMatrix2fv(const float *v) const { glUniformMatrix2fv(id, 1, GL_FALSE, v); }
00038 inline void setUniformMatrix3fv(const float *v) const { glUniformMatrix3fv(id, 1, GL_FALSE, v); }
00039 inline void setUniformMatrix4fv(const float *v) const { glUniformMatrix4fv(id, 1, GL_FALSE, v); }
00040
00041 inline void setSampler(GLuint, int texNum) const { glUniform1i(id, texNum); }
00042
00043 inline void setUniform1b(bool v) const { setUniform1i(b2i(v)); }
00044 inline void setUniform2b(bool v0, bool v1) const { setUniform2i(b2i(v0), b2i(v1)); }
00045 inline void setUniform3b(bool v0, bool v1, bool v2) const { setUniform3i(b2i(v0), b2i(v1), b2i(v2)); }
00046 inline void setUniform4b(bool v0, bool v1, bool v2, bool v3) const { setUniform4i(b2i(v0), b2i(v1), b2i(v2), b2i(v3)); }
00047 inline void setUniform1bv(const bool *v) const { setUniform1i(b2i(v[0])); }
00048 inline void setUniform2bv(const bool *v) const { setUniform2i(b2i(v[0]), b2i(v[1])); }
00049 inline void setUniform3bv(const bool *v) const { setUniform3i(b2i(v[0]), b2i(v[1]), b2i(v[2])); }
00050 inline void setUniform4bv(const bool *v) const { setUniform4i(b2i(v[0]), b2i(v[1]), b2i(v[2]), b2i(v[3])); }
00051
00052 private:
00053 static int b2i(bool b) { return b ? 1 : 0; }
00054
00055 private:
00056 bool valid;
00057 GLint id;
00058 };
00059
00060 }
00061
00062 #endif