Main Page | Class Hierarchy | Class List | Directories | File List

UniformGLSL.h

00001 #ifndef __UNIFORM_GLSL__
00002 #define __UNIFORM_GLSL__
00003 
00004 #include <OpenGL.h>
00005 #include <QString>
00006 
00007 namespace apig {
00008 
00009     // classe pour les identifiants de paramètres 'uniform' de programmes GLSL :
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; }    // conversion pour envoyer un bool au GPU
00054             
00055         private:
00056             bool valid;     // true ssi la variable est active dans le programme
00057             GLint id;       // identifiant OpenGL de l'uniform
00058         };
00059     
00060     }
00061 
00062 #endif

Generated on Fri Nov 14 20:49:47 2008 for Api Graphics by  doxygen 1.4.4