18 const char *glsl_string(
const GLenum type )
45 void print_uniform_value(
const GLuint program,
const int index,
const char *name,
const GLenum type,
const GLint size )
53 float values[16]= { };
62 int n= std::min(10, size);
63 for(
int i= 0; i < n; i++)
73 glGetUniformiv(program, index +i, &value);
74 printf(
"value= %s\n", value ?
"true" :
"false");
77 glGetUniformiv(program, index +i, &value);
78 printf(
"value= %d\n", value);
81 glGetUniformfv(program, index +i, values);
82 printf(
"value= %f\n", values[0]);
85 glGetUniformfv(program, index +i, values);
86 printf(
"values= %f %f\n", values[0], values[1]);
89 glGetUniformfv(program, index +i, values);
90 printf(
"values= %f %f %f\n", values[0], values[1], values[2]);
93 glGetUniformfv(program, index +i, values);
94 printf(
"values= %f %f %f %f\n", values[0], values[1], values[2], values[3]);
97 glGetUniformfv(program, index +i, values);
99 for(
int r= 0; r < 4; r++)
102 for(
int c= 0; c < 4; c++)
103 printf(
"%f ", values[c*4 + r]);
109 printf(
" uniform '%s', type %x, type unknown\n", name, type);
119 int print_uniforms(
const GLuint program )
123 printf(
"[error] program 0, no uniforms...\n");
129 glGetProgramiv(program, GL_ACTIVE_UNIFORMS, &n);
132 printf(
"program %u: no uniforms...\n", program);
138 glGetProgramiv(program, GL_ACTIVE_UNIFORM_MAX_LENGTH, &length_max);
141 char *name=
new char [length_max];
143 printf(
"program %u:\n", program);
145 for(
int index= 0; index < n; index++)
149 glGetActiveUniform(program, index, length_max, NULL, &glsl_size, &glsl_type, name);
151 GLint location= glGetUniformLocation(program, name);
153 printf(
" uniform %i '%s': location %d, type %s (0x%x), array_size %d\n", index, name, location,
154 glsl_string(glsl_type), glsl_type, glsl_size);
156 print_uniform_value(program, index, name, glsl_type, glsl_size);
165 int print_attribs(
const GLuint program,
const GLuint vao= 0 )
169 printf(
"[error] program 0, no attributes...\n");
175 glGetProgramiv(program, GL_ACTIVE_ATTRIBUTES, &n);
178 printf(
"program %u: no attributes...\n", program);
184 glGetProgramiv(program, GL_ACTIVE_ATTRIBUTE_MAX_LENGTH, &length_max);
187 char *name=
new char [length_max];
189 printf(
"program %u:\n", program);
191 for(
int index= 0; index < n; index++)
195 glGetActiveAttrib(program, index, length_max, NULL, &glsl_size, &glsl_type, name);
197 GLint location= glGetAttribLocation(program, name);
199 printf(
" attribute %d '%s': location %d, type %s (0x%x), array_size %d\n", index, name, location,
200 glsl_string(glsl_type), glsl_type, glsl_size);
205 glGetVertexAttribiv(index, GL_VERTEX_ATTRIB_ARRAY_BUFFER_BINDING, &buffer);
207 printf(
" buffer %d\n", buffer);
228 print_uniforms(program);
234 GLint location= glGetUniformLocation(program,
"positions");
242 glGenVertexArrays(1, &vao);
245 print_uniforms(program);
247 print_attribs(program, vao);
250 glClearColor(0.2, 0.2, 0.2, 1);
253 glDepthFunc(GL_LESS);
254 glEnable(GL_DEPTH_TEST);
262 glDeleteVertexArrays(1, &vao);
271 glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
274 glBindVertexArray(vao);
277 glUseProgram(program);
281 location= glGetUniformLocation(program,
"color");
282 glUniform4f(location, 1, 0.5, 0, 1);
300 glDrawArrays(GL_TRIANGLES, 0, 36);
306 int main(
int argc,
char **argv )
321 printf(
"[error] init failed.\n");
Context create_context(Window window, const int major, const int minor)
cree et configure un contexte opengl
const float * vertex_buffer() const
renvoie l'adresse de la position du premier sommet. permet de construire les vertex buffers openGL...
representation d'un objet / maillage.
void draw(Mesh &m, const Transform &model, const Transform &view, const Transform &projection, const GLuint texture)
applique une texture a la surface de l'objet. ne fonctionne que si les coordonnees de textures sont f...
void release()
detruit les objets openGL.
Window create_window(const int w, const int h)
creation d'une fenetre pour l'application.
GLuint read_program(const char *filename, const char *definitions)
bool value(Widgets &w, const char *label, int &value, const int value_min, const int value_max, const int value_step)
valeur editable par increment.
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().
int release_program(const GLuint program)
detruit les shaders et le program.
void release_context(Context context)
detruit le contexte openGL.
int vertex_count() const
renvoie le nombre de sommets.
void release_window(Window window)
destruction de la fenetre.
int run(Window window, int(*draw)(void))
fonction principale. gestion des evenements et appel de la fonction draw de l'application.
Mesh read_mesh(const char *filename)
charge un fichier wavefront .obj et renvoie un mesh compose de triangles non indexes. utiliser glDrawArrays pour l'afficher. a detruire avec Mesh::release( ).