gKit2 light

- Main Page
- Related Pages
- Modules
- Classes
- Files

Files | Functions
utilitaires openGL

## Files
file | buffer.h
file | program.h
file | texture.h
file | uniforms.h

## Functions
GLuint | make_buffer (const GLenum target, const size_t data_size, const void *data, const GLenum usage=GL_STATIC_DRAW)
| cree un buffer. a detruire avec glDeleteBuffers( ). More...
GLuint | create_vertex_format ()
| cree un vertex array. a detruire avec release_vertex_format( ). More...
GLuint | make_vertex_buffer (const GLuint vao, const GLint attribute, const int size, const GLenum type, const size_t data_size, const void *data)
| cree un vertex buffer et configure le vertex array vao. detruit par release_vertex_format( ). More...
GLuint | make_index_buffer (const GLuint vao, const size_t data_size, const void *data)
| cree un index buffer et configure le vertex array vao. detruit par release_vertex_format( ). More...
bool | update_buffer (const GLenum target, const size_t data_size, const void *data)
| modifie le contenu d'un buffer. More...
bool | update_vertex_buffer (const GLuint vao, const GLint attribute, const size_t data_size, const void *data)
| modifie le contenu d'un vertex buffer associe au vertex format, vao. More...
bool | update_index_buffer (const GLuint vao, const size_t data_size, const void *data)
| modifie le contenu d'un index buffer associe au vertex format, vao More...
void | release_vertex_format (const GLuint vao)
| detruit le vertex array vao et les buffers associes, crees par make_vertex_buffer() et make_index_buffer(). More...
GLuint | read_program (const char *filename, const char *definitions="")
int | release_program (const GLuint program)
| detruit les shaders et le program. More...
int | reload_program (const GLuint program, const char *filename, const char *definitions="")
| recharge les sources et recompile un shader program. More...
int | program_format_errors (const GLuint program, std::string &errors)
| renvoie les erreurs de compilation. More...
int | program_print_errors (const GLuint program)
| affiche les erreurs de compilation. More...
GLuint | make_texture (const int unit, const Image &im, const GLenum texel_type=GL_RGBA32F)
GLuint | make_texture (const int unit, const ImageData &im, const GLenum texel_type=GL_RGBA)
GLuint | read_texture (const int unit, const char *filename, const GLenum texel_type=GL_RGBA)
int | miplevels (const int width, const int height)
| renvoie le nombre de mipmap d'une image width x height. More...
int | screenshot (const char *filename)
| enregistre le contenu de la fenetre dans un fichier filename nom de l'image a ecrire. doit etre de type .png / .bmp More...
int | capture (const char *prefix)
void | program_uniform (const GLuint program, const char *uniform, const unsigned int v)
| affecte une valeur a un uniform du shader program. uint. More...
void | program_uniform (const GLuint program, const char *uniform, const int v)
| affecte une valeur a un uniform du shader program. int. More...
void | program_uniform (const GLuint program, const char *uniform, const float v)
| affecte une valeur a un uniform du shader program. float. More...
void | program_uniform (const GLuint program, const char *uniform, const vec2 &v)
| affecte une valeur a un uniform du shader program. vec2. More...
void | program_uniform (const GLuint program, const char *uniform, const vec3 &v)
| affecte une valeur a un uniform du shader program. vec3. More...
void | program_uniform (const GLuint program, const char *uniform, const Point &v)
| affecte une valeur a un uniform du shader program. Point. More...
void | program_uniform (const GLuint program, const char *uniform, const Vector &v)
| affecte une valeur a un uniform du shader program. Vector. More...
void | program_uniform (const GLuint program, const char *uniform, const vec4 &v)
| affecte une valeur a un uniform du shader program. vec4. More...
void | program_uniform (const GLuint program, const char *uniform, const Color &c)
| affecte une valeur a un uniform du shader program. Color. More...
void | program_uniform (const GLuint program, const char *uniform, const Transform &v)
| affecte une valeur a un uniform du shader program. Transform. More...
void | program_use_texture (const GLuint program, const char *uniform, const int unit, const GLuint texture, const GLuint sampler=0)
| configure le pipeline et le shader program pour utiliser une texture, et des parametres de filtrages, eventuellement. More...

## Detailed Description

## Function Documentation

GLuint make_buffer | ( | const GLenum | target,
|  | const size_t | data_size,
|  | const void * | data,
|  | const GLenum | usage = `GL_STATIC_DRAW`
| ) |  |

cree un buffer. a detruire avec glDeleteBuffers( ).

Definition at line 7 of file buffer.cpp.

8 {
9 if(data_size == 0)
10 {
11 printf("[error] 0B buffer...\n");
12 return 0;
13 }
14
15 GLuint buffer;
16 glGenBuffers(1, &buffer);
17 glBindBuffer(target, buffer);
18 glBufferData(target, data_size, data, usage);
19 return buffer;
20 }
printf
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().
Definition: text.cpp:140

GLuint create_vertex_format | ( |  | ) |

cree un vertex array. a detruire avec release_vertex_format( ).

Definition at line 23 of file buffer.cpp.

24 {
25 GLuint vao;
26 glGenVertexArrays(1, &vao);
27 glBindVertexArray(vao);
28 return vao;
29 }

GLuint make_vertex_buffer | ( | const GLuint | vao,
|  | const GLint | attribute,
|  | const int | size,
|  | const GLenum | type,
|  | const size_t | data_size,
|  | const void * | data
| ) |  |

cree un vertex buffer et configure le vertex array vao. detruit par release_vertex_format( ).

Definition at line 59 of file buffer.cpp.

61 {
62 if(attribute < 0)
63 return 0;
64
65 #ifndef GK_RELEASE
66 // verifie que le vertex array est selectionne
67 GLuint current;
68 glGetIntegerv(GL_VERTEX_ARRAY_BINDING, (GLint *) &current);
69 if(current != vao)
70 {
71 printf("[error] wrong vertex array %u...\n", current);
72 glBindVertexArray(vao);
73 }
74 #endif
75
76 GLuint buffer= make_buffer(GL_ARRAY_BUFFER, data_size, data);
77 if(buffer > 0)
78 {
79 // configure l'utilisation du buffer
80 glVertexAttribPointer(attribute, size, type, GL_FALSE, 0, 0);
81 glEnableVertexAttribArray(attribute);
82 }
83 return buffer;
84 }
make_buffer
GLuint make_buffer(const GLenum target, const size_t data_size, const void *data, const GLenum usage)
cree un buffer. a detruire avec glDeleteBuffers( ).
Definition: buffer.cpp:7
printf
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().
Definition: text.cpp:140

GLuint make_index_buffer | ( | const GLuint | vao,
|  | const size_t | data_size,
|  | const void * | data
| ) |  |

cree un index buffer et configure le vertex array vao. detruit par release_vertex_format( ).

Definition at line 86 of file buffer.cpp.

87 {
88 #ifndef GK_RELEASE
89 // verifie que le vertex array est selectionne
90 GLuint current;
91 glGetIntegerv(GL_VERTEX_ARRAY_BINDING, (GLint *) &current);
92 if(current != vao)
93 {
94 printf("[error] wrong vertex array %u...\n", current);
95 glBindVertexArray(vao);
96 }
97 #endif
98
99 GLuint buffer= make_buffer(GL_ELEMENT_ARRAY_BUFFER, data_size, data);
100 return buffer;
101 }
make_buffer
GLuint make_buffer(const GLenum target, const size_t data_size, const void *data, const GLenum usage)
cree un buffer. a detruire avec glDeleteBuffers( ).
Definition: buffer.cpp:7
printf
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().
Definition: text.cpp:140

bool update_buffer | ( | const GLenum | target,
|  | const size_t | data_size,
|  | const void * | data
| ) |  |

modifie le contenu d'un buffer.

Definition at line 104 of file buffer.cpp.

105 {
106 #ifndef GK_RELEASE
107 GLint buffer_size= 0;
108 glGetBufferParameteriv(target, GL_BUFFER_SIZE, &buffer_size);
109 if((size_t) buffer_size < data_size)
110 {
111 printf("[error] updating small buffer %d < %d...\n", (int) buffer_size, (int) data_size);
112 glBufferData(target, data_size, data, GL_STATIC_DRAW);
113 return false;
114 }
115 #endif
116
117 glBufferSubData(target, 0, data_size, data);
118 return true;
119 }
printf
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().
Definition: text.cpp:140

bool update_vertex_buffer | ( | const GLuint | vao,
|  | const GLint | attribute,
|  | const size_t | data_size,
|  | const void * | data
| ) |  |

modifie le contenu d'un vertex buffer associe au vertex format, vao.

Definition at line 121 of file buffer.cpp.

122 {
123 #ifndef GK_RELEASE
124 // verifie que le vertex array est selectionne
125 GLuint current;
126 glGetIntegerv(GL_VERTEX_ARRAY_BINDING, (GLint *) &current);
127 if(current != vao)
128 {
129 printf("[error] wrong vertex array %u...\n", current);
130 glBindVertexArray(vao);
131 }
132 #endif
133
134 GLuint buffer= 0;
135 glGetVertexAttribiv(attribute, GL_VERTEX_ATTRIB_ARRAY_BUFFER_BINDING, (GLint *) &buffer);
136 if(buffer == 0)
137 return false;
138
139 glBindBuffer(GL_ARRAY_BUFFER, buffer);
140 return update_buffer(GL_ARRAY_BUFFER, data_size, data);
141 }
update_buffer
bool update_buffer(const GLenum target, const size_t data_size, const void *data)
modifie le contenu d'un buffer.
Definition: buffer.cpp:104
printf
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().
Definition: text.cpp:140

bool update_index_buffer | ( | const GLuint | vao,
|  | const size_t | data_size,
|  | const void * | data
| ) |  |

modifie le contenu d'un index buffer associe au vertex format, vao

Definition at line 143 of file buffer.cpp.

144 {
145 #ifndef GK_RELEASE
146 // verifie que le vertex array est selectionne
147 GLuint current;
148 glGetIntegerv(GL_VERTEX_ARRAY_BINDING, (GLint *) &current);
149 if(current != vao)
150 {
151 printf("[error] wrong vertex array %u...\n", current);
152 glBindVertexArray(vao);
153 }
154 #endif
155
156 // recupere l'index buffer
157 GLuint buffer;
158 glGetIntegerv(GL_ELEMENT_ARRAY_BUFFER_BINDING, (GLint *) &buffer);
159 if(buffer == 0)
160 return false;
161
162 glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, buffer);
163 return update_buffer(GL_ELEMENT_ARRAY_BUFFER, data_size, data);
164 }
update_buffer
bool update_buffer(const GLenum target, const size_t data_size, const void *data)
modifie le contenu d'un buffer.
Definition: buffer.cpp:104
printf
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().
Definition: text.cpp:140

void release_vertex_format | ( | const GLuint | vao | ) |

detruit le vertex array vao et les buffers associes, crees par make_vertex_buffer() et make_index_buffer().

Definition at line 31 of file buffer.cpp.

32 {
33 if(vao == 0)
34 return;
35
36 glBindVertexArray(vao);
37
38 GLint n= 0;
39 glGetIntegerv(GL_MAX_VERTEX_ATTRIBS, &n);
40
41 // recupere les vertex buffers associes au vao
42 GLuint buffer= 0;
43 for(int i= 0; i < n; i++)
44 {
45 glGetVertexAttribiv(i, GL_VERTEX_ATTRIB_ARRAY_BUFFER_BINDING, (GLint *) &buffer);
46 if(buffer > 0)
47 glDeleteBuffers(1, &buffer);
48 }
49
50 // et l'index buffer
51 glGetIntegerv(GL_ELEMENT_ARRAY_BUFFER_BINDING, (GLint *) &buffer);
52 if(buffer > 0)
53 glDeleteBuffers(1, &buffer);
54
55 glDeleteVertexArrays(1, &vao);
56 }

GLuint read_program | ( | const char * | filename,
|  | const char * | definitions = `""`
| ) |  |

cree un shader program. a detruire avec release_program( ).
charge un seul fichier, les shaders sont separes par #ifdef VERTEX_SHADER / #endif et #ifdef FRAGMENT_SHADER / #endif.
renvoie l'identifiant openGL du program et le program est selectionne (cf glUseProgram( )).

Parameters

  definitions | est une chaine de caracteres pouvant comporter plusieurs lignes "#define what value\n" .

Definition at line 150 of file program.cpp.

151 {
152 GLuint program= glCreateProgram();
153 reload_program(program, filename, definitions);
154 return program;
155 }
reload_program
int reload_program(GLuint program, const char *filename, const char *definitions)
recharge les sources et recompile un shader program.
Definition: program.cpp:98

int release_program | ( | const GLuint | program | ) |

detruit les shaders et le program.

Definition at line 157 of file program.cpp.

158 {
159 if(program == 0)
160 return -1;
161
162 // recupere les shaders
163 int shaders_max= 0;
164 glGetProgramiv(program, GL_ATTACHED_SHADERS, &shaders_max);
165
166 std::vector<GLuint> shaders(shaders_max, 0);
167 glGetAttachedShaders(program, shaders_max, NULL, &shaders.front());
168 for(int i= 0; i < shaders_max; i++)
169 {
170 glDetachShader(program, shaders[i]);
171 glDeleteShader(shaders[i]);
172 }
173
174 glDeleteProgram(program);
175 return 0;
176 }

int reload_program | ( | const GLuint | program,
|  | const char * | filename,
|  | const char * | definitions = `""`
| ) |  |

recharge les sources et recompile un shader program.

Definition at line 98 of file program.cpp.

99 {
100 if(program == 0)
101 return -1;
102
103 // supprime les shaders attaches au program
104 int shaders_max= 0;
105 glGetProgramiv(program, GL_ATTACHED_SHADERS, &shaders_max);
106 if(shaders_max > 0)
107 {
108 std::vector<GLuint> shaders(shaders_max, 0);
109 glGetAttachedShaders(program, shaders_max, NULL, &shaders.front());
110 for (int i = 0; i < shaders_max; i++)
111 {
112 glDetachShader(program, shaders[i]);
113 glDeleteShader(shaders[i]);
114 }
115 }
116
117 #ifdef GL_VERSION_4_3
118 glObjectLabel(GL_PROGRAM, program, -1, filename);
119 #endif
120
121 // prepare les sources
122 std::string common_source= read(filename);
123 std::string vertex_source= prepare_source(common_source, std::string(definitions).append("#define VERTEX_SHADER\n"));
124 std::string fragment_source= prepare_source(common_source, std::string(definitions).append("#define FRAGMENT_SHADER\n"));
125
126 // cree et compile un vertex shader et un fragment shader
127 GLuint vertex_shader= compile_shader(program, GL_VERTEX_SHADER, vertex_source);
128 GLuint fragment_shader= compile_shader(program, GL_FRAGMENT_SHADER, fragment_source);
129 // linke les shaders
130 glLinkProgram(program);
131
132 // verifie les erreurs
133 GLint status;
134 glGetProgramiv(program, GL_LINK_STATUS, &status);
135 if(status == GL_FALSE)
136 {
137 if(vertex_shader == 0)
138 printf("[error] compiling vertex shader...\n%s\n", definitions);
139 if(fragment_shader == 0)
140 printf("[error] compiling fragment shader...\n%s\n", definitions);
141 printf("[error] linking program %u '%s'...\n", program, filename);
142 return -1;
143 }
144
145 // pour etre coherent avec les autres fonctions de creation, active l'objet gl qui vient d'etre cree.
146 glUseProgram(program);
147 return 0;
148 }
printf
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().
Definition: text.cpp:140

int program_format_errors | ( | const GLuint | program,
|  | std::string & | errors
| ) |  |

renvoie les erreurs de compilation.

Definition at line 262 of file program.cpp.

263 {
264 errors.clear();
265
266 if(program == 0)
267 {
268 errors.append("[error] no program...\n");
269 return -1;
270 }
271
272 GLint status;
273 glGetProgramiv(program, GL_LINK_STATUS, &status);
274 if(status == GL_TRUE)
275 return 0;
276
277 int first_error= INT_MAX;
278
279 // recupere les shaders
280 int shaders_max= 0;
281 glGetProgramiv(program, GL_ATTACHED_SHADERS, &shaders_max);
282
283 std::vector<GLuint> shaders(shaders_max, 0);
284 glGetAttachedShaders(program, shaders_max, NULL, &shaders.front());
285 for(int i= 0; i < shaders_max; i++)
286 {
287 GLint value;
288 glGetShaderiv(shaders[i], GL_COMPILE_STATUS, &value);
289 if(value == GL_FALSE)
290 {
291 // recupere les erreurs de compilation des shaders
292 glGetShaderiv(shaders[i], GL_INFO_LOG_LENGTH, &value);
293 std::vector<char>log(value+1, 0);
294 glGetShaderInfoLog(shaders[i], (GLsizei) log.size(), NULL, &log.front());
295
296 // recupere le source
297 glGetShaderiv(shaders[i], GL_SHADER_SOURCE_LENGTH, &value);
298 std::vector<char> source(value+1, 0);
299 glGetShaderSource(shaders[i], source.size(), NULL, &source.front());
300
301 glGetShaderiv(shaders[i], GL_SHADER_TYPE, &value);
302 errors.append("[error] compiling ");
303 if(value == GL_VERTEX_SHADER)
304 errors.append("vertex shader...\n");
305 else if(value == GL_FRAGMENT_SHADER)
306 errors.append("fragment shader...\n");
307 else
308 errors.append("shader...\n");
309
310 // formatte les erreurs
311 int last_error= print_errors(errors, &log.front(), &source.front());
312 first_error= std::min(first_error, last_error);
313 }
314 }
315
316 // recupere les erreurs de link du program
317 {
318 GLint value= 0;
319 glGetProgramiv(program, GL_INFO_LOG_LENGTH, &value);
320
321 std::vector<char>log(value+1, 0);
322 glGetProgramInfoLog(program, (GLsizei) log.size(), NULL, &log.front());
323
324 errors.append("[error] linking program...\n").append(log.begin(), log.end());
325 }
326
327 return first_error;
328 }
value
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.
Definition: widgets.cpp:191

int program_print_errors | ( | const GLuint | program | ) |

affiche les erreurs de compilation.

Definition at line 330 of file program.cpp.

331 {
332 std::string errors;
333 int code= program_format_errors(program, errors);
334 if(errors.size() > 0)
335 printf("%s\n", errors.c_str());
336 return code;
337 }
program_format_errors
int program_format_errors(const GLuint program, std::string &errors)
renvoie les erreurs de compilation.
Definition: program.cpp:262
printf
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().
Definition: text.cpp:140

GLuint make_texture | ( | const int | unit,
|  | const Image & | im,
|  | const GLenum | texel_type = `GL_RGBA32F`
| ) |  |

cree une texture a partir d'une image im. a detruire avec glDeleteTextures( ).

Parameters

  texel_type | permet de choisir la representation interne des valeurs de la texture.

Definition at line 25 of file texture.cpp.

26 {
27 if(im == Image::error())
28 return 0;
29
30 // cree la texture openGL
31 GLuint texture;
32 glGenTextures(1, &texture);
33 glActiveTexture(GL_TEXTURE0 + unit);
34 glBindTexture(GL_TEXTURE_2D, texture);
35
36 // fixe les parametres de filtrage par defaut
37 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_LINEAR);
38 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
39 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_BORDER);
40 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_BORDER);
41
42 // transfere les donnees dans la texture, 4 float par texel
43 glTexImage2D(GL_TEXTURE_2D, 0,
44 texel_type, im.width(), im.height(), 0,
45 GL_RGBA, GL_FLOAT, im.buffer());
46
47 // prefiltre la texture
48 glGenerateMipmap(GL_TEXTURE_2D);
49 return texture;
50 }
Image::buffer
const void * buffer() const
renvoie un pointeur sur le stockage des couleurs des pixels.
Definition: image.h:54
Image::error
static Image & error()
Definition: image.h:75
Image::height
int height() const
renvoie la hauteur de l'image.
Definition: image.h:63
Image::width
int width() const
renvoie la largeur de l'image.
Definition: image.h:61

GLuint make_texture | ( | const int | unit,
|  | const ImageData & | im,
|  | const GLenum | texel_type = `GL_RGBA`
| ) |  |

cree une texture a partir des donnees d'une image, cf image_io.h. a detruire avec glDeleteTextures( ).

Parameters

  texel_type | permet de choisir la representation interne des valeurs de la texture.

Definition at line 52 of file texture.cpp.

53 {
54 if(im.data.empty())
55 return 0;
56
57 // cree la texture openGL
58 GLuint texture;
59 glGenTextures(1, &texture);
60 glActiveTexture(GL_TEXTURE0 + unit);
61 glBindTexture(GL_TEXTURE_2D, texture);
62
63 // fixe les parametres de filtrage par defaut
64 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_LINEAR);
65 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
66 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_BORDER);
67 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_BORDER);
68
69 GLenum format;
70 switch(im.channels)
71 {
72 case 1: format= GL_RED; break;
73 case 2: format= GL_RG; break;
74 case 3: format= GL_RGB; break;
75 case 4: format= GL_RGBA; break;
76 default: format= GL_RGBA;
77 }
78
79 GLenum type;
80 switch(im.size)
81 {
82 case 1: type= GL_UNSIGNED_BYTE; break;
83 case 4: type= GL_FLOAT; break;
84 default: type= GL_UNSIGNED_BYTE;
85 }
86
87 // transfere les donnees dans la texture
88 glTexImage2D(GL_TEXTURE_2D, 0,
89 texel_type, im.width, im.height, 0,
90 format, type, im.buffer());
91
92 // prefiltre la texture
93 glGenerateMipmap(GL_TEXTURE_2D);
94 return texture;
95 }

GLuint read_texture | ( | const int | unit,
|  | const char * | filename,
|  | const GLenum | texel_type = `GL_RGBA`
| ) |  |

cree une texture a partir d'un fichier filename. a detruire avec glDeleteTextures( ).

Parameters

  texel_type | permet de choisir la representation interne des valeurs de la texture.

Definition at line 98 of file texture.cpp.

99 {
100 ImageData image= read_image_data(filename);
101 return make_texture(unit, image, texel_type);
102 }
read_image_data
ImageData read_image_data(const char *filename)
charge les donnees d'un fichier png. renvoie une image initialisee par defaut en cas d'echec...
Definition: image_io.cpp:144
ImageData
stockage temporaire des donnees d'une image.
Definition: image_io.h:23
make_texture
GLuint make_texture(const int unit, const Image &im, const GLenum texel_type)
Definition: texture.cpp:25

int miplevels | ( | const int | width,
|  | const int | height
| ) |  |

renvoie le nombre de mipmap d'une image width x height.

Definition at line 10 of file texture.cpp.

11 {
12 int w= width;
13 int h= height;
14 int levels= 1;
15 while(w > 1 || h > 1)
16 {
17 w= std::max(1, w / 2);
18 h= std::max(1, h / 2);
19 levels= levels + 1;
20 }
21
22 return levels;
23 }

int screenshot | ( | const char * | filename | ) |

enregistre le contenu de la fenetre dans un fichier filename nom de l'image a ecrire. doit etre de type .png / .bmp

Definition at line 105 of file texture.cpp.

106 {
107 // recupere le contenu de la fenetre / framebuffer par defaut
108 glFinish();
109
110 glBindFramebuffer(GL_READ_FRAMEBUFFER, 0);
111 glReadBuffer(GL_BACK);
112
113 // recupere les dimensions de la fenetre
114 GLint viewport[4];
115 glGetIntegerv(GL_VIEWPORT, viewport);
116
117 // transfere les pixels
118 ImageData image(viewport[2], viewport[3], 4);
119 glReadPixels(0, 0, image.width, image.height,
120 GL_RGBA, GL_UNSIGNED_BYTE, image.buffer());
121
122 // ecrit l'image
123 return write_image_data(image, filename);
124 }
ImageData
stockage temporaire des donnees d'une image.
Definition: image_io.h:23
write_image_data
int write_image_data(ImageData &image, const char *filename)
enregistre des donnees dans un fichier png.
Definition: image_io.cpp:222

int capture | ( | const char * | prefix | ) |

capture video. enregistre le contenu de la fenetre dans un fichier prefix%04d.bmp.

pour obtenir une video 30 images par secondes, compresser avec : avconv -r 30 -f image2 -i prefix%04d.bmp -c:v libx264 -crf 19 video.m4v

verifier que le codec x264 est installe : avconv -codecs | grep x264

s'il n'est pas installe : sudo apt-get install libavcodec-extra-53 ou la version actuelle : sudo apt-get install libavcodec-extra-*

exemple d'utilisation : cf shader_kit.cpp

static bool video= false;
if(key_state(SDLK_RETURN))
{
clear_key_state(SDLK_RETURN);
video= !video;
if(video) printf("start video capture...\n");
else printf("stop video cpature.\n");
}
if(video) capture("shader_kit");

Definition at line 126 of file texture.cpp.

127 {
128 static int id= 1;
129
130 char tmp[4096];
131 sprintf(tmp,"%s%04d.bmp", prefix, id);
132
133 if(id % 30 == 0)
134 printf("capture frame '%s'...\n", tmp);
135
136 id++;
137 return screenshot(tmp);
138 }
printf
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().
Definition: text.cpp:140
screenshot
int screenshot(const char *filename)
enregistre le contenu de la fenetre dans un fichier filename nom de l'image a ecrire. doit etre de type .png / .bmp
Definition: texture.cpp:105

void program_uniform | ( | const GLuint | program,
|  | const char * | uniform,
|  | const unsigned int | v
| ) |  |

affecte une valeur a un uniform du shader program. uint.

Definition at line 68 of file uniforms.cpp.

69 {
70 glUniform1ui( location(program, uniform), v );
71 }

void program_uniform | ( | const GLuint | program,
|  | const char * | uniform,
|  | const int | v
| ) |  |

affecte une valeur a un uniform du shader program. int.

Definition at line 73 of file uniforms.cpp.

74 {
75 glUniform1i( location(program, uniform), v );
76 }

void program_uniform | ( | const GLuint | program,
|  | const char * | uniform,
|  | const float | v
| ) |  |

affecte une valeur a un uniform du shader program. float.

Definition at line 78 of file uniforms.cpp.

79 {
80 glUniform1f( location(program, uniform), v );
81 }

void program_uniform | ( | const GLuint | program,
|  | const char * | uniform,
|  | const vec2 & | v
| ) |  |

affecte une valeur a un uniform du shader program. vec2.

Definition at line 83 of file uniforms.cpp.

84 {
85 glUniform2fv( location(program, uniform), 1, &v.x );
86 }

void program_uniform | ( | const GLuint | program,
|  | const char * | uniform,
|  | const vec3 & | v
| ) |  |

affecte une valeur a un uniform du shader program. vec3.

Definition at line 88 of file uniforms.cpp.

89 {
90 glUniform3fv( location(program, uniform), 1, &v.x );
91 }

void program_uniform | ( | const GLuint | program,
|  | const char * | uniform,
|  | const Point & | v
| ) |  |

affecte une valeur a un uniform du shader program. Point.

Definition at line 93 of file uniforms.cpp.

94 {
95 glUniform3fv( location(program, uniform), 1, &a.x );
96 }

void program_uniform | ( | const GLuint | program,
|  | const char * | uniform,
|  | const Vector & | v
| ) |  |

affecte une valeur a un uniform du shader program. Vector.

Definition at line 98 of file uniforms.cpp.

99 {
100 glUniform3fv( location(program, uniform), 1, &v.x );
101 }

void program_uniform | ( | const GLuint | program,
|  | const char * | uniform,
|  | const vec4 & | v
| ) |  |

affecte une valeur a un uniform du shader program. vec4.

Definition at line 103 of file uniforms.cpp.

104 {
105 glUniform4fv( location(program, uniform), 1, &v.x );
106 }

void program_uniform | ( | const GLuint | program,
|  | const char * | uniform,
|  | const Color & | c
| ) |  |

affecte une valeur a un uniform du shader program. Color.

Definition at line 108 of file uniforms.cpp.

109 {
110 glUniform4fv( location(program, uniform), 1, &c.r );
111 }

void program_uniform | ( | const GLuint | program,
|  | const char * | uniform,
|  | const Transform & | v
| ) |  |

affecte une valeur a un uniform du shader program. Transform.

Definition at line 113 of file uniforms.cpp.

114 {
115 glUniformMatrix4fv( location(program, uniform), 1, GL_TRUE, v.buffer() );
116 }
Transform::buffer
const float * buffer() const
renvoie l'adresse de la premiere valeur de la matrice.
Definition: mat.h:44

void program_use_texture | ( | const GLuint | program,
|  | const char * | uniform,
|  | const int | unit,
|  | const GLuint | texture,
|  | const GLuint | sampler = `0`
| ) |  |

configure le pipeline et le shader program pour utiliser une texture, et des parametres de filtrages, eventuellement.

Definition at line 118 of file uniforms.cpp.

119 {
120 // verifie que l'uniform existe
121 int id= location(program, uniform);
122 if(id < 0)
123 return;
124
125 // selectionne l'unite de texture
126 glActiveTexture(GL_TEXTURE0 + unit);
127 // configure la texture
128 glBindTexture(GL_TEXTURE_2D, texture);
129
130 if(sampler > 0)
131 // et ses parametres de filtrage, si necessaire
132 glBindSampler(unit, sampler);
133
134 // transmet l'indice de l'unite de texture au shader
135 glUniform1i(id, unit);
136 }