11 int location(
const GLuint program,
const char *uniform )
17 GLint location= glGetUniformLocation(program, uniform);
20 char error[1024]= { 0 };
24 glGetObjectLabel(GL_PROGRAM, program,
sizeof(label), NULL, label);
26 sprintf(error,
"uniform( %s %u, '%s' ): not found.", label, program, uniform);
29 sprintf(error,
"uniform( program %u, '%s'): not found.", program, uniform);
32 static std::set<std::string> log;
33 if(log.insert(error).second ==
true)
43 glGetIntegerv(GL_CURRENT_PROGRAM, (GLint *) ¤t);
44 if(current != program)
46 char error[1024]= { 0 };
50 glGetObjectLabel(GL_PROGRAM, program,
sizeof(label), NULL, label);
52 glGetObjectLabel(GL_PROGRAM, current,
sizeof(labelc), NULL, labelc);
54 sprintf(error,
"uniform( %s %u, '%s' ): invalid shader program %s %u", label, program, uniform, labelc, current);
57 sprintf(error,
"uniform( program %u, '%s'): invalid shader program %u...", program, uniform, current);
61 glUseProgram(program);
68 void program_uniform(
const GLuint program,
const char *uniform,
const unsigned int v )
70 glUniform1ui( location(program, uniform), v );
75 glUniform1i( location(program, uniform), v );
80 glUniform1f( location(program, uniform), v );
85 glUniform2fv( location(program, uniform), 1, &v.x );
90 glUniform3fv( location(program, uniform), 1, &v.x );
95 glUniform3fv( location(program, uniform), 1, &a.x );
100 glUniform3fv( location(program, uniform), 1, &v.x );
105 glUniform4fv( location(program, uniform), 1, &v.x );
110 glUniform4fv( location(program, uniform), 1, &c.r );
115 glUniformMatrix4fv( location(program, uniform), 1, GL_TRUE, v.
buffer() );
118 void program_use_texture(
const GLuint program,
const char *uniform,
const int unit,
const GLuint texture,
const GLuint sampler )
121 int id= location(program, uniform);
126 glActiveTexture(GL_TEXTURE0 + unit);
128 glBindTexture(GL_TEXTURE_2D, texture);
132 glBindSampler(unit, sampler);
135 glUniform1i(
id, unit);
vecteur generique, utilitaire.
vecteur generique, utilitaire.
representation d'une couleur (rgba) transparente ou opaque.
vecteur generique 4d, ou 3d homogene, utilitaire.
void program_uniform(const GLuint program, const char *uniform, const unsigned int v)
affecte une valeur a un uniform du shader program. uint.
void program_use_texture(const GLuint program, const char *uniform, const int unit, const GLuint texture, const GLuint sampler)
configure le pipeline et le shader program pour utiliser une texture, et des parametres de filtrages...
representation d'un vecteur 3d.
void printf(Text &text, const int px, const int py, const char *format,...)
affiche un texte a la position x, y. meme utilisation que printf().
representation d'un point 3d.
void label(Widgets &w, const char *format,...)
cree un texte. meme fonctionnement que printf().