ptitchep | Salut!
Je programme un jeu de combat avec OpenGl et Glut et lorsque j'appelle cette fonction, le gestionnaire des taches de windows m'indique que la mémoire utilisée par mon processus grimpe en flèche (je passe environ de 50 Mo à 120 Mo):
Code :
- using namespace std;
- #include <iostream>
- #include <direct.h>
- #include "baston.hpp"
- extern GLubyte tex_ciel[2048*2048*4], tex_sol[2048*2048*4];
- extern GLubyte tex_devant[1024*1024*4], tex_derriere[1024*1024*4];
- extern GLubyte tex_droite[1024*1024*4],tex_gauche[1024*1024*4];
- extern GLuint textures_skybox[6];
- extern int nb_mondes;
- extern int monde_en_cours;
- //------------------------------------------------------------------------------
- //-------------------------INITIALISATION DE LA SKYBOX--------------------------
- //------------------------------------------------------------------------------
- void init_skybox()
- {
- int i,j,k;
- FILE *fich;
- char nomonde[3];
- char monde[15];
-
- GLubyte en_tete[37];
-
- glEnable(GL_TEXTURE_2D);
- glGenTextures(6,textures_skybox);
-
-
- //Répertoires pour les textures
- strcpy(monde,"monde" );
- to_char(monde_en_cours,monde+5);//ajoute le numéro du monde à la fin de monde
-
-
- //Choix du répertoire en cours
- chdir(monde);
-
- //ciel:
- fich=fopen("ciel.bmp","rb" );
- if(fich==NULL) exit(0);
-
- fread (en_tete,1,54,fich);
-
- for(i=0;i<2048;i++)
- {
- for(j=0;j<2048;j++)
- {
- fread(&tex_ciel[(i*2048+j)*4+2],sizeof(GLubyte),1,fich);
- fread(&tex_ciel[(i*2048+j)*4+1],sizeof(GLubyte),1,fich);
- fread(&tex_ciel[(i*2048+j)*4+0],sizeof(GLubyte),1,fich);
- tex_ciel[(i*2048+j)*4+3]=255;
- }
- }
- glBindTexture(GL_TEXTURE_2D,textures_skybox[0]);
- glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
- glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
- glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_WRAP_S,GL_REPEAT );
- glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_WRAP_T,GL_REPEAT );
- glTexImage2D(GL_TEXTURE_2D,0,GL_RGBA,2048,2048,0,GL_RGBA,GL_UNSIGNED_BYTE,tex_ciel);
-
- //sol:
- fich=fopen("sol.bmp","rb" );
- if(fich==NULL) exit(0);
-
- fread (en_tete,1,54,fich);
-
- for(i=0;i<2048;i++)
- {
- for(j=0;j<2048;j++)
- {
- fread(&tex_sol[(i*2048+j)*4+2],sizeof(GLubyte),1,fich);
- fread(&tex_sol[(i*2048+j)*4+1],sizeof(GLubyte),1,fich);
- fread(&tex_sol[(i*2048+j)*4+0],sizeof(GLubyte),1,fich);
- tex_sol[(i*2048+j)*4+3]=255;
- }
- }
-
- fclose (fich);
- glBindTexture(GL_TEXTURE_2D,textures_skybox[1]);
- glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
- glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
- glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_WRAP_S,GL_REPEAT );
- glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_WRAP_T,GL_REPEAT );
- glTexImage2D(GL_TEXTURE_2D,0,GL_RGBA,2048,2048,0,GL_RGBA,GL_UNSIGNED_BYTE,tex_sol);
-
- //derriere:
- fich=fopen("derriere.bmp","rb" );
- if(fich==NULL) exit(0);
-
- fread (en_tete,1,54,fich);
-
- for(i=0;i<1024;i++)
- {
- for(j=0;j<1024;j++)
- {
- fread(&tex_derriere[(i*1024+j)*4+2],sizeof(GLubyte),1,fich);
- fread(&tex_derriere[(i*1024+j)*4+1],sizeof(GLubyte),1,fich);
- fread(&tex_derriere[(i*1024+j)*4+0],sizeof(GLubyte),1,fich);
- tex_derriere[(i*1024+j)*4+3]=255;
- }
- }
-
- fclose (fich);
- glBindTexture(GL_TEXTURE_2D,textures_skybox[2]);
- glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
- glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
- glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_WRAP_S,GL_REPEAT );
- glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_WRAP_T,GL_REPEAT );
- glTexImage2D(GL_TEXTURE_2D,0,GL_RGBA,1024,1024,0,GL_RGBA,GL_UNSIGNED_BYTE,tex_derriere);
-
- //devant:
- fich=fopen("devant.bmp","rb" );
- if(fich==NULL) exit(0);
-
- fread (en_tete,1,54,fich);
-
- for(i=0;i<1024;i++)
- {
- for(j=0;j<1024;j++)
- {
- fread(&tex_devant[(i*1024+j)*4+2],sizeof(GLubyte),1,fich);
- fread(&tex_devant[(i*1024+j)*4+1],sizeof(GLubyte),1,fich);
- fread(&tex_devant[(i*1024+j)*4+0],sizeof(GLubyte),1,fich);
- tex_devant[(i*1024+j)*4+3]=255;
- }
- }
-
- fclose (fich);
- glBindTexture(GL_TEXTURE_2D,textures_skybox[3]);
- glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
- glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
- glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_WRAP_S,GL_REPEAT );
- glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_WRAP_T,GL_REPEAT );
- glTexImage2D(GL_TEXTURE_2D,0,GL_RGBA,1024,1024,0,GL_RGBA,GL_UNSIGNED_BYTE,tex_devant);
-
- //gauche:
- fich=fopen("gauche.bmp","rb" );
- if(fich==NULL) exit(0);
-
- fread (en_tete,1,54,fich);
-
- for(i=0;i<1024;i++)
- {
- for(j=0;j<1024;j++)
- {
- fread(&tex_gauche[(i*1024+j)*4+2],sizeof(GLubyte),1,fich);
- fread(&tex_gauche[(i*1024+j)*4+1],sizeof(GLubyte),1,fich);
- fread(&tex_gauche[(i*1024+j)*4+0],sizeof(GLubyte),1,fich);
- tex_gauche[(i*1024+j)*4+3]=255;
- }
- }
-
- fclose (fich);
- glBindTexture(GL_TEXTURE_2D,textures_skybox[4]);
- glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
- glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
- glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_WRAP_S,GL_REPEAT );
- glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_WRAP_T,GL_REPEAT );
- glTexImage2D(GL_TEXTURE_2D,0,GL_RGBA,1024,1024,0,GL_RGBA,GL_UNSIGNED_BYTE,tex_gauche);
-
- //droite:
- fich=fopen("droite.bmp","rb" );
- if(fich==NULL) exit(0);
-
- fread (en_tete,1,54,fich);
-
- for(i=0;i<1024;i++)
- {
- for(j=0;j<1024;j++)
- {
- fread(&tex_droite[(i*1024+j)*4+2],sizeof(GLubyte),1,fich);
- fread(&tex_droite[(i*1024+j)*4+1],sizeof(GLubyte),1,fich);
- fread(&tex_droite[(i*1024+j)*4+0],sizeof(GLubyte),1,fich);
- tex_droite[(i*1024+j)*4+3]=255;
- }
- }
-
- fclose (fich);
- glBindTexture(GL_TEXTURE_2D,textures_skybox[5]);
- glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
- glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
- glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_WRAP_S,GL_REPEAT );
- glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_WRAP_T,GL_REPEAT );
- glTexImage2D(GL_TEXTURE_2D,0,GL_RGBA,1024,1024,0,GL_RGBA,GL_UNSIGNED_BYTE,tex_droite);
-
-
- chdir(".." );
- }
|
Pourtant je n'ai aucune allocation dynamique puisque mes tableaux ont des tailles fixes et sont déclarés variables globales dans le .cpp principal
merci ---------------
deluser --remove-home ptitchep
|