gKit2 light
Loading...
Searching...
No Matches
utilitaires openGL

Files

file  src/gKit/program.h
file  src/gKit/texture.h
file  src/gKit/uniforms.h

Functions

GLuint read_program (const char *filename, const char *definitions="")
int release_program (const GLuint program)
 detruit les shaders et le program.
int reload_program (const GLuint program, const char *filename, const char *definitions="")
int program_format_errors (const GLuint program, std::string &errors)
 renvoie les erreurs de compilation.
int program_print_errors (const GLuint program)
 affiche les erreurs de compilation.
bool program_ready (const GLuint program)
 renvoie vrai si le programme est pret. (pas d'erreurs de compilation des shaders, pas d'erreur de link).
bool program_errors (const GLuint program)
 renvoie vrai si le programme n'est pas pret.
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)
GLuint read_srgb_texture (const int unit, const char *filename, const GLenum texel_type=GL_SRGB8_ALPHA8)
int screenshot (const char *filename)
 enregistre le contenu de la fenetre dans un fichier. doit etre de type .png / .bmp
int screenshot (const char *prefix, const int id)
 enregistre le contenu de la fenetre dans un fichier numerote prefixXXX.png. id est le numero de la capture.
int capture (const char *prefix)
GLuint make_texture (const int unit, const int width, const int height, const GLenum texel_type, const GLenum data_format=GL_RGBA, const GLenum data_type=GL_UNSIGNED_BYTE)
 creation de textures filtrables / mipmaps
GLuint make_flat_texture (const int unit, const int width, const int height, const GLenum texel_type, const GLenum data_format=GL_RGBA, const GLenum data_type=GL_UNSIGNED_BYTE)
 creation de textures non filtrables / 1 mipmap
GLuint make_depth_texture (const int unit, const int width, const int height, const GLenum texel_type=GL_DEPTH_COMPONENT)
 creation de textures pour stocker des donnees (autres qu'une couleur).
GLuint make_uint_texture (const int unit, const int width, const int height, const GLenum texel_type=GL_R32UI)
 creation de textures pour stocker des donnees (autres qu'une couleur).
GLuint make_float_texture (const int unit, const int width, const int height, const GLenum texel_type=GL_R32F)
 creation de textures pour stocker des donnees (autres qu'une couleur).
GLuint make_vec2_texture (const int unit, const int width, const int height, const GLenum texel_type=GL_RG32F)
 creation de textures pour stocker des donnees (autres qu'une couleur).
GLuint make_vec3_texture (const int unit, const int width, const int height, const GLenum texel_type=GL_RGB32F)
 creation de textures pour stocker des donnees (autres qu'une couleur).
GLuint make_vec4_texture (const int unit, const int width, const int height, const GLenum texel_type=GL_RGBA32F)
 creation de textures pour stocker des donnees (autres qu'une couleur).
void program_uniform (const GLuint program, const char *uniform, const unsigned v)
 affecte une valeur a un uniform du shader program. uint.
void program_uniform (const GLuint program, const char *uniform, const int v)
 affecte une valeur a un uniform du shader program. int.
void program_uniform (const GLuint program, const char *uniform, const float v)
 affecte une valeur a un uniform du shader program. float.
void program_uniform (const GLuint program, const char *uniform, const vec2 &v)
 affecte une valeur a un uniform du shader program. vec2.
void program_uniform (const GLuint program, const char *uniform, const vec3 &v)
 affecte une valeur a un uniform du shader program. vec3.
void program_uniform (const GLuint program, const char *uniform, const Point &v)
 affecte une valeur a un uniform du shader program. Point.
void program_uniform (const GLuint program, const char *uniform, const Vector &v)
 affecte une valeur a un uniform du shader program. Vector.
void program_uniform (const GLuint program, const char *uniform, const vec4 &v)
 affecte une valeur a un uniform du shader program. vec4.
void program_uniform (const GLuint program, const char *uniform, const Color &c)
 affecte une valeur a un uniform du shader program. Color.
void program_uniform (const GLuint program, const char *uniform, const Transform &v)
 affecte une valeur a un uniform du shader program. Transform.
void program_uniform (const GLuint program, const char *uniform, const std::vector< unsigned > &c)
 affecte un tableau de valeurs a un uniform du shader program.
void program_uniform (const GLuint program, const char *uniform, const std::vector< int > &c)
 affecte un tableau de valeurs a un uniform du shader program.
void program_uniform (const GLuint program, const char *uniform, const std::vector< float > &c)
 affecte un tableau de valeurs a un uniform du shader program.
void program_uniform (const GLuint program, const char *uniform, const std::vector< vec2 > &c)
 affecte un tableau de valeurs a un uniform du shader program.
void program_uniform (const GLuint program, const char *uniform, const std::vector< vec3 > &c)
 affecte un tableau de valeurs a un uniform du shader program.
void program_uniform (const GLuint program, const char *uniform, const std::vector< vec4 > &c)
 affecte un tableau de valeurs a un uniform du shader program.
void program_uniform (const GLuint program, const char *uniform, const std::vector< Color > &c)
 affecte un tableau de valeurs a un uniform du shader program.
void program_uniform (const GLuint program, const char *uniform, const std::vector< Transform > &v)
 affecte un tableau de valeurs a un uniform du shader program.
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 filtrage, eventuellement.

Detailed Description

Function Documentation

◆ read_program()

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
filenamenom du fichier source.
definitionschaine de caracteres pouvant comporter plusieurs lignes "#define what value\n".

Definition at line 218 of file program.cpp.

219{
220 GLuint program= glCreateProgram();
221 reload_program(program, filename, definitions);
222 return program;
223}
int reload_program(const GLuint program, const char *filename, const char *definitions)
Definition program.cpp:163

◆ release_program()

int release_program ( const GLuint program)

detruit les shaders et le program.

Definition at line 225 of file program.cpp.

226{
227 if(program == 0)
228 return -1;
229
230 // recupere les shaders
231 int shaders_max= 0;
232 glGetProgramiv(program, GL_ATTACHED_SHADERS, &shaders_max);
233
234 if(shaders_max > 0)
235 {
236 std::vector<GLuint> shaders(shaders_max, 0);
237 glGetAttachedShaders(program, shaders_max, NULL, &shaders.front());
238 for(int i= 0; i < shaders_max; i++)
239 {
240 glDetachShader(program, shaders[i]);
241 glDeleteShader(shaders[i]);
242 }
243 }
244
245 glDeleteProgram(program);
246 return 0;
247}

◆ reload_program()

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

recharge les sources et recompile un shader program.

Parameters
programshader program a modifier
filenamenom du fichier source a charger
definitionscf read_program

Definition at line 163 of file program.cpp.

164{
165 if(program == 0)
166 return -1;
167
168 // supprime les shaders attaches au program
169 int shaders_max= 0;
170 glGetProgramiv(program, GL_ATTACHED_SHADERS, &shaders_max);
171 if(shaders_max > 0)
172 {
173 std::vector<GLuint> shaders(shaders_max, 0);
174 glGetAttachedShaders(program, shaders_max, NULL, &shaders.front());
175 for (int i = 0; i < shaders_max; i++)
176 {
177 glDetachShader(program, shaders[i]);
178 glDeleteShader(shaders[i]);
179 }
180 }
181
182#ifdef GL_VERSION_4_3
183 glObjectLabel(GL_PROGRAM, program, -1, filename);
184#endif
185
186 // prepare les sources
187 std::string common_source= read(filename);
188 for(int i = 0; i < shader_keys_max; i++)
189 {
190 if(common_source.find(shader_keys[i]) != std::string::npos)
191 {
192 // cree et compile les shaders detectes dans le source
193 std::string source= prepare_source(common_source, std::string(definitions).append("#define ").append(shader_keys[i]).append("\n"));
194 GLuint shader= compile_shader(program, shader_types[i], source);
195 //~ printf(" %s...\n", shader_string(shader_types[i]));
196 if(shader == 0)
197 printf("[error] compiling %s...\n%s\n", shader_string(shader_types[i]), definitions);
198 }
199 }
200
201 // linke les shaders
202 glLinkProgram(program);
203
204 // verifie les erreurs
205 GLint status;
206 glGetProgramiv(program, GL_LINK_STATUS, &status);
207 if(status == GL_FALSE)
208 {
209 printf("[error] linking program %u '%s'...\n", program, filename);
210 return -1;
211 }
212
213 // pour etre coherent avec les autres fonctions de creation, active l'objet gl qui vient d'etre cree.
214 glUseProgram(program);
215 return 0;
216}
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

◆ program_format_errors()

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

renvoie les erreurs de compilation.

Definition at line 380 of file program.cpp.

381{
382 errors.clear();
383
384 if(program == 0)
385 {
386 errors.append("[error] no program...\n");
387 return -1;
388 }
389
390 GLint status;
391 glGetProgramiv(program, GL_LINK_STATUS, &status);
392 if(status == GL_TRUE)
393 return 0;
394
395 int first_error= INT_MAX;
396 // recupere les shaders
397 int shaders_max= 0;
398 glGetProgramiv(program, GL_ATTACHED_SHADERS, &shaders_max);
399 if(shaders_max == 0)
400 {
401 errors.append("[error] no shaders...\n");
402 return 0;
403 }
404
405 std::vector<GLuint> shaders(shaders_max, 0);
406 glGetAttachedShaders(program, shaders_max, NULL, &shaders.front());
407 for(int i= 0; i < shaders_max; i++)
408 {
409 GLint value;
410 glGetShaderiv(shaders[i], GL_COMPILE_STATUS, &value);
411 if(value == GL_FALSE)
412 {
413 // recupere les erreurs de compilation des shaders
414 glGetShaderiv(shaders[i], GL_INFO_LOG_LENGTH, &value);
415 std::vector<char>log(value+1, 0);
416 glGetShaderInfoLog(shaders[i], (GLsizei) log.size(), NULL, &log.front());
417
418 // recupere le source
419 glGetShaderiv(shaders[i], GL_SHADER_SOURCE_LENGTH, &value);
420 std::vector<char> source(value+1, 0);
421 glGetShaderSource(shaders[i], (GLsizei) source.size(), NULL, &source.front());
422
423 glGetShaderiv(shaders[i], GL_SHADER_TYPE, &value);
424 errors.append("[error] compiling ").append(shader_string(value)).append("...\n");
425
426 // formatte les erreurs
427 int last_error= print_errors(errors, &log.front(), &source.front());
428 first_error= std::min(first_error, last_error);
429 }
430 }
431
432 // recupere les erreurs de link du program
433 {
434 GLint value= 0;
435 glGetProgramiv(program, GL_INFO_LOG_LENGTH, &value);
436
437 std::vector<char>log(value+1, 0);
438 glGetProgramInfoLog(program, (GLsizei) log.size(), NULL, &log.front());
439
440 errors.append("[error] linking program...\n").append(log.begin(), log.end());
441 }
442
443 return first_error;
444}

◆ program_print_errors()

int program_print_errors ( const GLuint program)

affiche les erreurs de compilation.

Definition at line 446 of file program.cpp.

447{
448 std::string errors;
449 int code= program_format_errors(program, errors);
450 if(errors.size() > 0)
451 printf("%s\n", errors.c_str());
452 return code;
453}
int program_format_errors(const GLuint program, std::string &errors)
renvoie les erreurs de compilation.
Definition program.cpp:380

◆ program_ready()

bool program_ready ( const GLuint program)

renvoie vrai si le programme est pret. (pas d'erreurs de compilation des shaders, pas d'erreur de link).

Definition at line 250 of file program.cpp.

251{
252 if(program == 0)
253 return false;
254
255 GLint status= GL_FALSE;
256 glGetProgramiv(program, GL_LINK_STATUS, &status);
257
258#ifndef GK_RELEASE
259 #ifdef GL_VERSION_4_3
260 char label[1024];
261 glGetObjectLabel(GL_PROGRAM, program, sizeof(label), nullptr, label);
262
263 if(status == GL_FALSE) // n'affiche le messsage qu'en cas d'erreur...
264 printf("program %u '%s' %s...\n", program, label, (status == GL_TRUE) ? "ready" : "not ready");
265 #else
266 printf("program %u %s...\n", program, (status == GL_TRUE) ? "ready" : "not ready");
267 #endif
268#endif
269
270 return (status == GL_TRUE);
271}

◆ program_errors()

bool program_errors ( const GLuint program)

renvoie vrai si le programme n'est pas pret.

Definition at line 273 of file program.cpp.

274{
275 if(program == 0)
276 return true;
277
278 GLint status;
279 glGetProgramiv(program, GL_LINK_STATUS, &status);
280
281#ifndef GK_RELEASE
282 #ifdef GL_VERSION_4_3
283 char label[1024];
284 glGetObjectLabel(GL_PROGRAM, program, sizeof(label), nullptr, label);
285
286 if(status == GL_FALSE) // n'affiche le messsage qu'en cas d'erreur...
287 printf("program %u '%s' %s...\n", program, label, (status == GL_TRUE) ? "ready" : "not ready");
288 #else
289 printf("program %u %s...\n", program, (status == GL_TRUE) ? "ready" : "not ready");
290 #endif
291#endif
292
293 return (status == GL_FALSE);
294}

◆ make_texture() [1/3]

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( ). la texture est cree sur unit . texel_type permet de choisir la representation interne des valeurs de la texture.

Definition at line 61 of file texture.cpp.

62{
63 if(im.size() == 0)
64 return 0;
65
66 // cree la texture openGL
67 GLuint texture;
68 glGenTextures(1, &texture);
69 glActiveTexture(GL_TEXTURE0 + unit);
70 glBindTexture(GL_TEXTURE_2D, texture);
71
72 // fixe les parametres de filtrage par defaut
73 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_LINEAR);
74 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
75 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);
76 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);
77
78 // transfere les donnees dans la texture, 4 float par texel
79 glTexImage2D(GL_TEXTURE_2D, 0,
80 texel_type, im.width(), im.height(), 0,
81 GL_RGBA, GL_FLOAT, im.data());
82
83 // prefiltre la texture
84 glGenerateMipmap(GL_TEXTURE_2D);
85 return texture;
86}
unsigned width() const
renvoie la largeur de l'image.
Definition image.h:100
unsigned size() const
renvoie le nombre de pixels de l'image.
Definition image.h:104
unsigned height() const
renvoie la hauteur de l'image.
Definition image.h:102
const float * data() const
renvoie un const pointeur sur le stockage des couleurs des pixels.
Definition image.h:86

◆ make_texture() [2/3]

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

Parameters
im. cf image_io.h. a detruire avec glDeleteTextures( ). la texture est cree sur
unit.
texel_typepermet de choisir la representation interne des valeurs de la texture.

Definition at line 88 of file texture.cpp.

89{
90 if(im.pixels.empty())
91 return 0;
92
93 // cree la texture openGL
94 GLuint texture;
95 glGenTextures(1, &texture);
96 glActiveTexture(GL_TEXTURE0 + unit);
97 glBindTexture(GL_TEXTURE_2D, texture);
98
99 // fixe les parametres de filtrage par defaut
100 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_LINEAR);
101 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
102 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);
103 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);
104
105 GLenum format;
106 switch(im.channels)
107 {
108 case 1: format= GL_RED; break;
109 case 2: format= GL_RG; break;
110 case 3: format= GL_RGB; break;
111 case 4: format= GL_RGBA; break;
112 default: format= GL_RGBA;
113 }
114
115 GLenum type;
116 switch(im.size)
117 {
118 case 1: type= GL_UNSIGNED_BYTE; break;
119 case 4: type= GL_FLOAT; break;
120 default: type= GL_UNSIGNED_BYTE;
121 }
122
123 // transfere les donnees dans la texture
124 glTexImage2D(GL_TEXTURE_2D, 0,
125 texel_type, im.width, im.height, 0,
126 format, type, im.data());
127
128 // prefiltre la texture
129 glGenerateMipmap(GL_TEXTURE_2D);
130 return texture;
131}

◆ read_texture()

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

charge une image

Parameters
filenameet cree une texture. a detruire avec glDeleteTextures( ). la texture est cree sur
unit.
texel_typepermet de choisir la representation interne des valeurs de la texture.

Definition at line 133 of file texture.cpp.

134{
135 ImageData image= read_image_data(filename);
136 return make_texture(unit, image, texel_type);
137}
ImageData read_image_data(const void *buffer, const unsigned size, const bool flipY)
charge les donnees d'un fichier png stocke en memoire. renvoie une image initialisee par defaut en ca...
Definition image_io.cpp:315
GLuint make_texture(const int unit, const int width, const int height, const GLenum texel_type, const GLenum data_format, const GLenum data_type)
creation de textures filtrables / mipmaps
Definition texture.cpp:10
stockage temporaire des donnees d'une image.
Definition image_io.h:53

◆ read_srgb_texture()

GLuint read_srgb_texture ( const int unit,
const char * filename,
const GLenum texel_type = GL_SRGB8_ALPHA8 )

idem read_texture(). utilise des couleurs sRGB au lieu de RGB. ie SRGB8 ou SRGB8_ALPHA8

Parameters
texel_typepermet de choisir la representation interne des valeurs de la texture.

Definition at line 139 of file texture.cpp.

140{
141 return read_texture(unit, filename, texel_type );
142}
GLuint read_texture(const int unit, const char *filename, const GLenum texel_type)
Definition texture.cpp:133

◆ screenshot() [1/2]

int screenshot ( const char * filename)

enregistre le contenu de la fenetre dans un fichier. doit etre de type .png / .bmp

Definition at line 178 of file texture.cpp.

179{
180 // recupere le contenu de la fenetre / framebuffer par defaut
181 glFinish();
182
183 glBindFramebuffer(GL_READ_FRAMEBUFFER, 0);
184 glReadBuffer(GL_BACK);
185
186 // recupere les dimensions de la fenetre
187 GLint viewport[4];
188 glGetIntegerv(GL_VIEWPORT, viewport);
189
190 // transfere les pixels
191 ImageData image(viewport[2], viewport[3], 4);
192 glReadPixels(0, 0, image.width, image.height,
193 GL_RGBA, GL_UNSIGNED_BYTE, image.data());
194 // ecrit l'image
195 return write_image_data(image, filename);
196}
int write_image_data(ImageData &image, const char *filename, const bool flipY)
enregistre des donnees dans un fichier png.
Definition image_io.cpp:346

◆ screenshot() [2/2]

int screenshot ( const char * prefix,
const int id )

enregistre le contenu de la fenetre dans un fichier numerote prefixXXX.png. id est le numero de la capture.

Definition at line 198 of file texture.cpp.

199{
200 char tmp[4096];
201 sprintf(tmp,"%s%02d.png", prefix, id);
202 return screenshot(tmp);
203}
int screenshot(const char *filename)
enregistre le contenu de la fenetre dans un fichier. doit etre de type .png / .bmp
Definition texture.cpp:178

◆ capture()

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 capture.\n");
}
if(video) capture("shader_kit");
void clear_key_state(const SDL_Keycode key)
desactive une touche du clavier.
Definition window.cpp:46
int key_state(const SDL_Keycode key)
renvoie l'etat d'une touche du clavier. cf la doc SDL2 pour les codes.
Definition window.cpp:40
int capture(const char *prefix)
Definition texture.cpp:205

Definition at line 205 of file texture.cpp.

206{
207 static int id= 1;
208
209 char tmp[4096];
210 sprintf(tmp,"%s%04d.bmp", prefix, id);
211
212 if(id % 30 == 0)
213 printf("capture frame '%s'...\n", tmp);
214
215 id++;
216 return screenshot(tmp);
217}

◆ make_texture() [3/3]

GLuint make_texture ( const int unit,
const int width,
const int height,
const GLenum texel_type,
const GLenum data_format = GL_RGBA,
const GLenum data_type = GL_UNSIGNED_BYTE )

creation de textures filtrables / mipmaps

Definition at line 10 of file texture.cpp.

11{
12 // cree la texture openGL
13 GLuint texture;
14 glGenTextures(1, &texture);
15 glActiveTexture(GL_TEXTURE0 + unit);
16 glBindTexture(GL_TEXTURE_2D, texture);
17
18 // fixe les parametres de filtrage par defaut
19 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_LINEAR);
20 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
21 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
22 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
23
24 // transfere les donnees dans la texture, 4 float par texel
25 glTexImage2D(GL_TEXTURE_2D, 0,
26 texel_type, width, height, 0,
27 data_format, data_type, nullptr);
28
29 // prefiltre la texture / alloue les mipmaps
30 glGenerateMipmap(GL_TEXTURE_2D);
31 return texture;
32}

◆ make_flat_texture()

GLuint make_flat_texture ( const int unit,
const int width,
const int height,
const GLenum texel_type,
const GLenum data_format = GL_RGBA,
const GLenum data_type = GL_UNSIGNED_BYTE )

creation de textures non filtrables / 1 mipmap

Definition at line 34 of file texture.cpp.

35{
36 // cree la texture openGL
37 GLuint texture;
38 glGenTextures(1, &texture);
39 glActiveTexture(GL_TEXTURE0 + unit);
40 glBindTexture(GL_TEXTURE_2D, texture);
41
42 // fixe les parametres de filtrage par defaut
43 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
44 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
45 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
46 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
47
48 // 1 seul mipmap
49 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAX_LEVEL, 0);
50
51 // transfere les donnees dans la texture, 4 float par texel
52 glTexImage2D(GL_TEXTURE_2D, 0,
53 texel_type, width, height, 0,
54 data_format, data_type, nullptr);
55
56 // prefiltre la texture / alloue les mipmaps
57 glGenerateMipmap(GL_TEXTURE_2D);
58 return texture;
59}

◆ make_depth_texture()

GLuint make_depth_texture ( const int unit,
const int width,
const int height,
const GLenum texel_type = GL_DEPTH_COMPONENT )

creation de textures pour stocker des donnees (autres qu'une couleur).

Definition at line 146 of file texture.cpp.

147{
148 return make_flat_texture(unit, width, height, texel_type, GL_DEPTH_COMPONENT, GL_UNSIGNED_INT);
149}
GLuint make_flat_texture(const int unit, const int width, const int height, const GLenum texel_type, const GLenum data_format, const GLenum data_type)
creation de textures non filtrables / 1 mipmap
Definition texture.cpp:34

◆ make_uint_texture()

GLuint make_uint_texture ( const int unit,
const int width,
const int height,
const GLenum texel_type = GL_R32UI )

creation de textures pour stocker des donnees (autres qu'une couleur).

Definition at line 151 of file texture.cpp.

152{
153 return make_flat_texture(unit, width, height, texel_type, GL_RED_INTEGER, GL_UNSIGNED_INT);
154}

◆ make_float_texture()

GLuint make_float_texture ( const int unit,
const int width,
const int height,
const GLenum texel_type = GL_R32F )

creation de textures pour stocker des donnees (autres qu'une couleur).

Definition at line 156 of file texture.cpp.

157{
158 return make_flat_texture(unit, width, height, texel_type, GL_RED, GL_FLOAT);
159}

◆ make_vec2_texture()

GLuint make_vec2_texture ( const int unit,
const int width,
const int height,
const GLenum texel_type = GL_RG32F )

creation de textures pour stocker des donnees (autres qu'une couleur).

Definition at line 161 of file texture.cpp.

162{
163 return make_flat_texture(unit, width, height, texel_type, GL_RG, GL_FLOAT);
164}

◆ make_vec3_texture()

GLuint make_vec3_texture ( const int unit,
const int width,
const int height,
const GLenum texel_type = GL_RGB32F )

creation de textures pour stocker des donnees (autres qu'une couleur).

Definition at line 166 of file texture.cpp.

167{
168 return make_flat_texture(unit, width, height, texel_type, GL_RGB, GL_FLOAT);
169}

◆ make_vec4_texture()

GLuint make_vec4_texture ( const int unit,
const int width,
const int height,
const GLenum texel_type = GL_RGBA32F )

creation de textures pour stocker des donnees (autres qu'une couleur).

Definition at line 171 of file texture.cpp.

172{
173 return make_flat_texture(unit, width, height, texel_type, GL_RGBA, GL_FLOAT);
174}

◆ program_uniform() [1/18]

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

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

◆ program_uniform() [2/18]

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 100 of file uniforms.cpp.

101{
102 glUniform1i( location(program, uniform), v );
103}

◆ program_uniform() [3/18]

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 111 of file uniforms.cpp.

112{
113 glUniform1f( location(program, uniform), v );
114}

◆ program_uniform() [4/18]

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 122 of file uniforms.cpp.

123{
124 glUniform2fv( location(program, uniform), 1, &v.x );
125}

◆ program_uniform() [5/18]

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 133 of file uniforms.cpp.

134{
135 glUniform3fv( location(program, uniform), 1, &v.x );
136}

◆ program_uniform() [6/18]

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 144 of file uniforms.cpp.

145{
146 glUniform3fv( location(program, uniform), 1, &a.x );
147}

◆ program_uniform() [7/18]

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 155 of file uniforms.cpp.

156{
157 glUniform3fv( location(program, uniform), 1, &v.x );
158}

◆ program_uniform() [8/18]

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 166 of file uniforms.cpp.

167{
168 glUniform4fv( location(program, uniform), 1, &v.x );
169}

◆ program_uniform() [9/18]

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 177 of file uniforms.cpp.

178{
179 glUniform4fv( location(program, uniform), 1, &c.r );
180}

◆ program_uniform() [10/18]

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 188 of file uniforms.cpp.

189{
190 glUniformMatrix4fv( location(program, uniform), 1, GL_TRUE, v.data() );
191}

◆ program_uniform() [11/18]

void program_uniform ( const GLuint program,
const char * uniform,
const std::vector< unsigned > & c )

affecte un tableau de valeurs a un uniform du shader program.

Definition at line 94 of file uniforms.cpp.

95{
96 assert(v.size());
97 glUniform1uiv( location(program, uniform, v.size()), v.size(), v.data() );
98}

◆ program_uniform() [12/18]

void program_uniform ( const GLuint program,
const char * uniform,
const std::vector< int > & c )

affecte un tableau de valeurs a un uniform du shader program.

Definition at line 105 of file uniforms.cpp.

106{
107 assert(v.size());
108 glUniform1iv( location(program, uniform, v.size()), v.size(), v.data() );
109}

◆ program_uniform() [13/18]

void program_uniform ( const GLuint program,
const char * uniform,
const std::vector< float > & c )

affecte un tableau de valeurs a un uniform du shader program.

Definition at line 116 of file uniforms.cpp.

117{
118 assert(v.size());
119 glUniform1fv( location(program, uniform, v.size()), v.size(), v.data() );
120}

◆ program_uniform() [14/18]

void program_uniform ( const GLuint program,
const char * uniform,
const std::vector< vec2 > & c )

affecte un tableau de valeurs a un uniform du shader program.

Definition at line 127 of file uniforms.cpp.

128{
129 assert(v.size());
130 glUniform2fv( location(program, uniform, v.size()), v.size(), &v[0].x );
131}

◆ program_uniform() [15/18]

void program_uniform ( const GLuint program,
const char * uniform,
const std::vector< vec3 > & c )

affecte un tableau de valeurs a un uniform du shader program.

Definition at line 138 of file uniforms.cpp.

139{
140 assert(v.size());
141 glUniform3fv( location(program, uniform, v.size()), v.size(), &v[0].x );
142}

◆ program_uniform() [16/18]

void program_uniform ( const GLuint program,
const char * uniform,
const std::vector< vec4 > & c )

affecte un tableau de valeurs a un uniform du shader program.

Definition at line 171 of file uniforms.cpp.

172{
173 assert(v.size());
174 glUniform4fv( location(program, uniform, v.size()), v.size(), &v[0].x );
175}

◆ program_uniform() [17/18]

void program_uniform ( const GLuint program,
const char * uniform,
const std::vector< Color > & c )

affecte un tableau de valeurs a un uniform du shader program.

Definition at line 182 of file uniforms.cpp.

183{
184 assert(c.size());
185 glUniform4fv( location(program, uniform, c.size()), c.size(), &c[0].r );
186}

◆ program_uniform() [18/18]

void program_uniform ( const GLuint program,
const char * uniform,
const std::vector< Transform > & v )

affecte un tableau de valeurs a un uniform du shader program.

Definition at line 193 of file uniforms.cpp.

194{
195 glUniformMatrix4fv( location(program, uniform, v.size()), v.size(), GL_TRUE, v[0].data() );
196}

◆ program_use_texture()

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 filtrage, eventuellement.

Definition at line 198 of file uniforms.cpp.

199{
200 // verifie que l'uniform existe
201 int id= location(program, uniform);
202 if(id < 0)
203 return;
204
205 // selectionne l'unite de texture
206 glActiveTexture(GL_TEXTURE0 + unit);
207 // configure la texture
208 glBindTexture(GL_TEXTURE_2D, texture);
209
210 // les parametres de filtrage
211 glBindSampler(unit, sampler);
212
213 // transmet l'indice de l'unite de texture au shader
214 glUniform1i(id, unit);
215}