25 GLuint
make_texture(
const int unit,
const int width,
const int height,
const GLenum texel_type,
const GLenum data_format,
const GLenum data_type )
29 glGenTextures(1, &texture);
30 glActiveTexture(GL_TEXTURE0 + unit);
31 glBindTexture(GL_TEXTURE_2D, texture);
34 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_LINEAR);
35 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
36 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
37 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
40 glTexImage2D(GL_TEXTURE_2D, 0,
41 texel_type, width, height, 0,
42 data_format, data_type,
nullptr);
45 glGenerateMipmap(GL_TEXTURE_2D);
49 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 )
53 glGenTextures(1, &texture);
54 glActiveTexture(GL_TEXTURE0 + unit);
55 glBindTexture(GL_TEXTURE_2D, texture);
58 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
59 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
60 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
61 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
64 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAX_LEVEL, 0);
67 glTexImage2D(GL_TEXTURE_2D, 0,
68 texel_type, width, height, 0,
69 data_format, data_type,
nullptr);
72 glGenerateMipmap(GL_TEXTURE_2D);
76 GLuint make_flat_depth_texture(
const int unit,
const int width,
const int height,
const GLenum texel_type )
78 return make_flat_texture(unit, width, height, texel_type, GL_DEPTH_COMPONENT, GL_UNSIGNED_INT);
89 glGenTextures(1, &texture);
90 glActiveTexture(GL_TEXTURE0 + unit);
91 glBindTexture(GL_TEXTURE_2D, texture);
94 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_LINEAR);
95 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
96 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
97 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
100 glTexImage2D(GL_TEXTURE_2D, 0,
102 GL_RGBA, GL_FLOAT, im.
data());
105 glGenerateMipmap(GL_TEXTURE_2D);
111 if(im.pixels.empty())
116 glGenTextures(1, &texture);
117 glActiveTexture(GL_TEXTURE0 + unit);
118 glBindTexture(GL_TEXTURE_2D, texture);
121 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_LINEAR);
122 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
123 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
124 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
129 case 1: format= GL_RED;
break;
130 case 2: format= GL_RG;
break;
131 case 3: format= GL_RGB;
break;
132 case 4: format= GL_RGBA;
break;
133 default: format= GL_RGBA;
139 case 1: type= GL_UNSIGNED_BYTE;
break;
140 case 4: type= GL_FLOAT;
break;
141 default: type= GL_UNSIGNED_BYTE;
145 glTexImage2D(GL_TEXTURE_2D, 0,
146 texel_type, im.width, im.height, 0,
147 format, type, im.data());
150 glGenerateMipmap(GL_TEXTURE_2D);
154 GLuint
read_texture(
const int unit,
const char *filename,
const GLenum texel_type )
162 GLuint
make_depth_texture(
const int unit,
const int width,
const int height,
const GLenum texel_type )
164 return make_flat_texture(unit, width, height, texel_type, GL_DEPTH_COMPONENT, GL_UNSIGNED_INT);
167 GLuint
make_uint_texture(
const int unit,
const int width,
const int height,
const GLenum texel_type )
169 return make_flat_texture(unit, width, height, texel_type, GL_RED_INTEGER, GL_UNSIGNED_INT);
172 GLuint
make_float_texture(
const int unit,
const int width,
const int height,
const GLenum texel_type )
177 GLuint
make_vec2_texture(
const int unit,
const int width,
const int height,
const GLenum texel_type )
182 GLuint
make_vec3_texture(
const int unit,
const int width,
const int height,
const GLenum texel_type )
187 GLuint
make_vec4_texture(
const int unit,
const int width,
const int height,
const GLenum texel_type )
199 glBindFramebuffer(GL_READ_FRAMEBUFFER, 0);
200 glReadBuffer(GL_BACK);
204 glGetIntegerv(GL_VIEWPORT, viewport);
207 ImageData image(viewport[2], viewport[3], 4);
208 glReadPixels(0, 0, image.width, image.height,
209 GL_RGBA, GL_UNSIGNED_BYTE, image.data());
217 sprintf(tmp,
"%s%02d.png", prefix,
id);
226 sprintf(tmp,
"%s%04d.bmp", prefix,
id);
229 printf(
"capture frame '%s'...\n", tmp);
representation d'une image.
int height() const
renvoie la hauteur de l'image.
const void * data() const
renvoie un pointeur sur le stockage des couleurs des pixels.
int width() const
renvoie la largeur de l'image.
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().
ImageData read_image_data(const char *filename)
charge les donnees d'un fichier png. renvoie une image initialisee par defaut en cas d'echec.
int write_image_data(ImageData &image, const char *filename)
enregistre des donnees dans un fichier png.
Point max(const Point &a, const Point &b)
renvoie la plus grande composante de chaque point. x, y, z= max(a.x, b.x), max(a.y,...
GLuint make_vec2_texture(const int unit, const int width, const int height, const GLenum texel_type)
creation de textures pour stocker des donnees (autres qu'une couleur).
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, const GLenum data_type)
creation de textures filtrables / mipmaps
int screenshot(const char *filename)
enregistre le contenu de la fenetre dans un fichier. doit etre de type .png / .bmp
GLuint make_vec3_texture(const int unit, const int width, const int height, const GLenum texel_type)
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)
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)
creation de textures pour stocker des donnees (autres qu'une couleur).
GLuint read_texture(const int unit, const char *filename, const GLenum texel_type)
int miplevels(const int width, const int height)
renvoie le nombre de mipmap d'une image width x height.
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
GLuint make_uint_texture(const int unit, const int width, const int height, const GLenum texel_type)
creation de textures pour stocker des donnees (autres qu'une couleur).
GLuint make_depth_texture(const int unit, const int width, const int height, const GLenum texel_type)
creation de textures pour stocker des donnees (autres qu'une couleur).
stockage temporaire des donnees d'une image.