gKit2 light
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 }
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 }
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
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 }
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
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 }
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 }
bool update_buffer(const GLenum target, const size_t data_size, const void *data)
modifie le contenu d'un buffer.
Definition: buffer.cpp:104
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 }
bool update_buffer(const GLenum target, const size_t data_size, const void *data)
modifie le contenu d'un buffer.
Definition: buffer.cpp:104
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
definitionsest 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 }
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 }
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 }
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 }
int program_format_errors(const GLuint program, std::string &errors)
renvoie les erreurs de compilation.
Definition: program.cpp:262
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_typepermet 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 }
const void * buffer() const
renvoie un pointeur sur le stockage des couleurs des pixels.
Definition: image.h:54
static Image & error()
Definition: image.h:75
int height() const
renvoie la hauteur de l'image.
Definition: image.h:63
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_typepermet 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_typepermet 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 }
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
stockage temporaire des donnees d'une image.
Definition: image_io.h:23
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 }
stockage temporaire des donnees d'une image.
Definition: image_io.h:23
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 }
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 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 }
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 }