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);
83 glGenTextures(1, &texture);
84 glActiveTexture(GL_TEXTURE0 + unit);
85 glBindTexture(GL_TEXTURE_2D, texture);
88 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_LINEAR);
89 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
90 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
91 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
94 glTexImage2D(GL_TEXTURE_2D, 0,
96 GL_RGBA, GL_FLOAT, im.
data());
99 glGenerateMipmap(GL_TEXTURE_2D);
105 if(im.pixels.empty())
110 glGenTextures(1, &texture);
111 glActiveTexture(GL_TEXTURE0 + unit);
112 glBindTexture(GL_TEXTURE_2D, texture);
115 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_LINEAR);
116 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
117 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
118 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
123 case 1: format= GL_RED;
break;
124 case 2: format= GL_RG;
break;
125 case 3: format= GL_RGB;
break;
126 case 4: format= GL_RGBA;
break;
127 default: format= GL_RGBA;
133 case 1: type= GL_UNSIGNED_BYTE;
break;
134 case 4: type= GL_FLOAT;
break;
135 default: type= GL_UNSIGNED_BYTE;
139 glTexImage2D(GL_TEXTURE_2D, 0,
140 texel_type, im.width, im.height, 0,
141 format, type, im.data());
144 glGenerateMipmap(GL_TEXTURE_2D);
148 GLuint
read_texture(
const int unit,
const char *filename,
const GLenum texel_type )
156 GLuint
make_depth_texture(
const int unit,
const int width,
const int height,
const GLenum texel_type )
158 return make_flat_texture(unit, width, height, texel_type, GL_DEPTH_COMPONENT, GL_UNSIGNED_INT);
161 GLuint
make_uint_texture(
const int unit,
const int width,
const int height,
const GLenum texel_type )
163 return make_flat_texture(unit, width, height, texel_type, GL_RED_INTEGER, GL_UNSIGNED_INT);
166 GLuint
make_float_texture(
const int unit,
const int width,
const int height,
const GLenum texel_type )
171 GLuint
make_vec2_texture(
const int unit,
const int width,
const int height,
const GLenum texel_type )
176 GLuint
make_vec3_texture(
const int unit,
const int width,
const int height,
const GLenum texel_type )
181 GLuint
make_vec4_texture(
const int unit,
const int width,
const int height,
const GLenum texel_type )
193 glBindFramebuffer(GL_READ_FRAMEBUFFER, 0);
194 glReadBuffer(GL_BACK);
198 glGetIntegerv(GL_VIEWPORT, viewport);
201 ImageData image(viewport[2], viewport[3], 4);
202 glReadPixels(0, 0, image.width, image.height,
203 GL_RGBA, GL_UNSIGNED_BYTE, image.data());
211 sprintf(tmp,
"%s%02d.png", prefix,
id);
220 sprintf(tmp,
"%s%04d.bmp", prefix,
id);
223 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.