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

Files

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

Classes

struct  PipelineProgram
 description d'un shader program compile. More...
class  PipelineCache
 ensemble de shader programs compiles. singleton. More...

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 reload_program (const GLuint program)
 recharge et recompile les shaders du program. utilise le cache pour retrouver la configuration et les sources.
int program_format_errors (const GLuint program, std::string &errors)
 renvoie les erreurs de compilation.
int program_print_errors (const GLuint program, const char *filename="")
 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


Class Documentation

◆ PipelineProgram

struct PipelineProgram

description d'un shader program compile.

Definition at line 50 of file program.h.

Class Members
string filename
string definitions
GLuint program

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 217 of file program.cpp.

218{
219 GLuint program= glCreateProgram();
220 reload_program(program, filename, definitions);
221
222 // ajoute le shader au cache
223 PipelineCache::manager().insert(program, filename, definitions);
224
225 return program;
226}
PipelineProgram * insert(const char *filename, const char *definitions="")
ajoute un shader dans le cache
Definition program.h:82
static PipelineCache & manager()
acces au singleton.
Definition program.h:130
int reload_program(const GLuint program, const char *filename, const char *definitions)
Definition program.cpp:228

◆ release_program()

int release_program ( const GLuint program)

detruit les shaders et le program.

Definition at line 240 of file program.cpp.

241{
242 if(program == 0)
243 return -1;
244
245 // recupere les shaders
246 int shaders_max= 0;
247 glGetProgramiv(program, GL_ATTACHED_SHADERS, &shaders_max);
248
249 if(shaders_max > 0)
250 {
251 std::vector<GLuint> shaders(shaders_max, 0);
252 glGetAttachedShaders(program, shaders_max, NULL, &shaders.front());
253 for(int i= 0; i < shaders_max; i++)
254 {
255 glDetachShader(program, shaders[i]);
256 glDeleteShader(shaders[i]);
257 }
258 }
259
260 glDeleteProgram(program);
261 return 0;
262}

◆ reload_program() [1/2]

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 228 of file program.cpp.

229{
230 return update_program(program, filename, definitions);
231}

◆ reload_program() [2/2]

int reload_program ( const GLuint program)

recharge et recompile les shaders du program. utilise le cache pour retrouver la configuration et les sources.

Definition at line 233 of file program.cpp.

234{
235 // recupere le shader directement dans le cache
236 return PipelineCache::manager().reload(program) ? 0 : -1;
237}
PipelineProgram * reload(const GLuint program)
recharge et recompile un programme du cache.
Definition program.h:104

◆ program_format_errors()

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

renvoie les erreurs de compilation.

Definition at line 395 of file program.cpp.

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

◆ program_print_errors()

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

affiche les erreurs de compilation.

Definition at line 461 of file program.cpp.

462{
463 std::string errors;
464 int code= program_format_errors(program, errors);
465 if(errors.size() > 0)
466 {
467 if(filename != nullptr && filename[0] != 0)
468 printf("[error] compiling '%s'...\n%s\n", filename, errors.c_str());
469 else
470 printf("%s\n", errors.c_str());
471 }
472 return code;
473}
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 program.cpp:395

◆ 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 265 of file program.cpp.

266{
267 if(program == 0)
268 return false;
269
270 GLint status= GL_FALSE;
271 glGetProgramiv(program, GL_LINK_STATUS, &status);
272
273#ifndef GK_RELEASE
274 #ifdef GL_VERSION_4_3
275 char label[1024];
276 glGetObjectLabel(GL_PROGRAM, program, sizeof(label), nullptr, label);
277
278 if(status == GL_FALSE) // n'affiche le messsage qu'en cas d'erreur...
279 printf("program %u '%s' %s...\n", program, label, (status == GL_TRUE) ? "ready" : "not ready");
280 #else
281 printf("program %u %s...\n", program, (status == GL_TRUE) ? "ready" : "not ready");
282 #endif
283#endif
284
285 return (status == GL_TRUE);
286}

◆ program_errors()

bool program_errors ( const GLuint program)

renvoie vrai si le programme n'est pas pret.

Definition at line 288 of file program.cpp.

289{
290 if(program == 0)
291 return true;
292
293 GLint status;
294 glGetProgramiv(program, GL_LINK_STATUS, &status);
295
296#ifndef GK_RELEASE
297 #ifdef GL_VERSION_4_3
298 char label[1024];
299 glGetObjectLabel(GL_PROGRAM, program, sizeof(label), nullptr, label);
300
301 if(status == GL_FALSE) // n'affiche le messsage qu'en cas d'erreur...
302 printf("program %u '%s' %s...\n", program, label, (status == GL_TRUE) ? "ready" : "not ready");
303 #else
304 printf("program %u %s...\n", program, (status == GL_TRUE) ? "ready" : "not ready");
305 #endif
306#endif
307
308 return (status == GL_FALSE);
309}

◆ 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:335
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:55

◆ 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(const ImageData &image, const char *filename, const bool flipY)
enregistre des donnees dans un fichier png.
Definition image_io.cpp:366

◆ 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:59
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:53
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}