charge les textures associees a un ensemble de matieres, sans depasser une limite de taille, 1Go par defaut.
94 std::vector<TextureData> textures;
98 for(
int i= 0; i < (int) materials.size(); i++)
105 data.use_diffuse=
true;
107 total_size= total_size + data.diffuse_image.width * data.diffuse_image.height * data.diffuse_image.channels * data.diffuse_image.size;
113 total_size= total_size + data.ns_image.width * data.ns_image.height * data.ns_image.channels * data.ns_image.size;
116 if(total_size > max_size)
119 std::vector<unsigned char>().swap(data.diffuse_image.pixels);
120 std::vector<unsigned char>().swap(data.ns_image.pixels);
123 textures.emplace_back(data);
126 printf(
"using %dMB / %dMB\n",
int(total_size / 1024 / 1024),
int(max_size / 1024 / 1024));
130 for(; total_size > max_size ; lod++)
133 for(
int i= 0; i < (int) textures.size(); i++)
135 if(textures[i].use_diffuse)
136 total_size= total_size + miplevel_size(textures[i].diffuse_image, lod);
137 if(textures[i].use_ns)
138 total_size= total_size + miplevel_size(textures[i].ns_image, lod);
142 printf(
" lod %d, %dMB\n", lod,
int(total_size / 1024 / 1024));
145 GLuint default_texture=
read_texture(0,
"data/grid.png");
147 printf(
"resizing textures...\n");
149 for(
int i= 0; i < (int) textures.size(); i++)
154 if(data.use_diffuse && data.diffuse_image.width > 0)
156 if(data.diffuse_image.pixels.empty())
160 assert(data.diffuse_image.width > 0);
163 ImageData level= mipmap_resize(data.diffuse_image, lod);
171 if(data.use_ns && data.ns_image.width > 0)
173 if(data.ns_image.pixels.empty())
177 assert(data.ns_image.width > 0);
180 ImageData level= mipmap_resize(data.ns_image, lod);
187 std::vector<unsigned char>().swap(data.diffuse_image.pixels);
188 std::vector<unsigned char>().swap(data.ns_image.pixels);
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.
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
GLuint read_texture(const int unit, const char *filename, const GLenum texel_type)
stockage temporaire des donnees d'une image.
representation d'une matiere texturee.
GLuint diffuse_texture
texture diffuse
std::string diffuse_filename
nom de la texture diffuse
GLuint ns_texture
texture exposant
std::string ns_filename
nom de la texture exposant
Color diffuse_texture_color
couleur moyenne de la texture