gKitGL
|
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