gKitGL
TPProgramName.h
00001 
00002 #ifndef _TP_PROGRAM_NAME_H
00003 #define _TP_PROGRAM_NAME_H
00004 
00005 #include "GL/GLPlatform.h"
00006 
00007 namespace gk {
00008     
00009 class GLShaderProgram;
00010 
00011 //! utilisation interne. identifiant generique.
00012 class ProgramName
00013 {
00014     ProgramName& operator= ( const ProgramName& );
00015     
00016     const GLShaderProgram *m_program;
00017     GLint m_location;
00018     GLint m_index;
00019     bool m_is_integer;
00020     
00021 public:
00022     int size;
00023     GLenum type;
00024 
00025     ProgramName( )
00026         :
00027         m_program(NULL),
00028         m_location(-1),
00029         m_index(-1),
00030         m_is_integer(false),
00031         size(0),
00032         type(0)
00033     {}
00034 
00035     ProgramName( const ProgramName& name ) 
00036         :
00037         m_program(name.m_program),
00038         m_location(name.m_location),
00039         m_index(name.m_index),
00040         m_is_integer(name.m_is_integer),
00041         size(name.size),
00042         type(name.type)
00043     {}
00044         
00045     explicit ProgramName( const GLShaderProgram *program, const GLint location, const GLint index, 
00046         const int _size, const GLenum _type, const bool is_integer= false ) 
00047         :
00048         m_program(program),
00049         m_location(location),
00050         m_index(index),
00051         m_is_integer(is_integer),
00052         size(_size),
00053         type(_type)
00054     {}
00055     
00056     ~ProgramName( ) {}
00057     
00058     const GLShaderProgram *program( ) const
00059     {
00060         return m_program;
00061     }
00062     
00063     const GLShaderProgram *program( )
00064     {
00065         return m_program;
00066     }
00067     
00068     GLint location( ) const
00069     {
00070         return m_location;
00071     }
00072     
00073     GLint index( ) const
00074     {
00075         return m_index;
00076     }
00077     
00078     bool isValid( ) const
00079     {
00080         return (m_program != NULL && m_location >= 0);
00081     }
00082     
00083     operator GLint ( ) const
00084     {
00085         return m_location;
00086     }
00087     
00088     bool isIntegerType( ) const
00089     {
00090         return m_is_integer;
00091     }
00092 };
00093 
00094 
00095 //! identifiant d'un uniform.
00096 typedef ProgramName ProgramUniform;
00097 //! identifiant d'un attribut.
00098 typedef ProgramName ProgramAttribute;
00099 //! identifiant d'un draw buffer / fragment varying.
00100 typedef ProgramName ProgramDrawbuffer;
00101 //! identifiant d'un transform feedback varying.
00102 typedef ProgramName ProgramFeedback;
00103 //! identifiant d'un sampler.
00104 typedef ProgramName ProgramSampler;
00105 
00106 
00107 //! modifier la valeur d'un sampler du shader program actif : index de l'unite de texture.
00108 int setSamplerUniform( const ProgramSampler& sampler, const int unit );
00109 
00110 class GLTexture;
00111 class GLSampler;
00112 //! activer une texture et l'associer a un sampler du shader program actif.
00113 int setTexture( const ProgramSampler& sampler_uniform, GLTexture *texture, GLSampler *texture_sampler= NULL );
00114 //! desactiver une texture activee par setTexture().
00115 int resetTexture(const ProgramSampler& sampler_uniform, GLTexture *texture );
00116 
00117 //! modifier la valeur d'un uniform du shader program actif, unsigned int.
00118 int setUniform( const ProgramUniform& uniform, const unsigned int x );
00119 //! modifier la valeur d'un uniform du shader program actif, uvec2.
00120 int setUniform( const ProgramUniform& uniform, const unsigned int x, const unsigned int y );
00121 //! modifier la valeur d'un uniform du shader program actif, uvec3.
00122 int setUniform( const ProgramUniform& uniform, const unsigned int x, const unsigned int y, const unsigned int z );
00123 //! modifier la valeur d'un uniform du shader program actif, uvec4.
00124 int setUniform( const ProgramUniform& uniform, const unsigned int x, const unsigned int y, const unsigned int z, const unsigned int w );
00125 
00126 //! modifier la valeur d'un uniform du shader program actif, int.
00127 int setUniform( const ProgramUniform& uniform, const int x );
00128 //! modifier la valeur d'un uniform du shader program actif, ivec2.
00129 int setUniform( const ProgramUniform& uniform, const int x, const int y );
00130 //! modifier la valeur d'un uniform du shader program actif, ivec3.
00131 int setUniform( const ProgramUniform& uniform, const int x, const int y, const int z );
00132 //! modifier la valeur d'un uniform du shader program actif, ivec4.
00133 int setUniform( const ProgramUniform& uniform, const int x, const int y, const int z, const int w );
00134 
00135 //! modifier la valeur d'un uniform du shader program actif, float.
00136 int setUniform( const ProgramUniform& uniform, const float x );
00137 //! modifier la valeur d'un uniform du shader program actif, vec2.
00138 int setUniform( const ProgramUniform& uniform, const float x, const float y );
00139 //! modifier la valeur d'un uniform du shader program actif, vec3.
00140 int setUniform( const ProgramUniform& uniform, const float x, const float y, const float z );
00141 //! modifier la valeur d'un uniform du shader program actif, vec4.
00142 int setUniform( const ProgramUniform& uniform, const float x, const float y, const float z, const float w );
00143 
00144 //! modifier la valeur d'un uniform du shader program actif, mat4.
00145 int setUniform( const ProgramUniform& uniform, const float *m, const GLboolean transpose );
00146 
00147 //! identifiant d'un uniform block / interface.
00148 class ProgramInterface
00149 {
00150     const GLShaderProgram *m_program;
00151     int m_index;
00152     
00153 public:
00154     unsigned int length;
00155 
00156     ProgramInterface( )
00157         :
00158         m_program(NULL),
00159         m_index(-1),
00160         length(0)
00161     {}
00162 
00163     ProgramInterface( const GLShaderProgram *program, const GLint index, const unsigned int _length )
00164         :
00165         m_program(program),
00166         m_index(index),
00167         length(_length)
00168     {}
00169 
00170     const GLShaderProgram *program( ) const
00171     {
00172         return m_program;
00173     }
00174     
00175     const GLShaderProgram *program( )
00176     {
00177         return m_program;
00178     }
00179     
00180     GLint index( ) const
00181     {
00182         return m_index;
00183     }
00184     
00185     bool isValid( ) const
00186     {
00187         return (m_program != NULL && m_index >= 0);
00188     }
00189 };
00190 
00191 int setUniformInterface( const ProgramInterface& interface, const GLuint interface_buffer );
00192 
00193 }
00194 
00195 #endif
 All Classes Namespaces Functions Variables Typedefs Enumerator Friends