01net    Web


Actuellement en ligne : 1233 Utilisateurs dont 44 dans Programmation et développement >S'inscrire      >S'identifier      >Recherche      >Aide  
modéré par A.Ouloube, Beno@  
01net > Forum de 01net > Programmation et développement > C/C++
> Pb: openGL & liberation mémoire textures [resolu]
Passionné(e) d'internet, de logiciels, de forums ? 01net recrute...
Auteur
Message
 
<     1       >
icare_olivier
  arriere, band de newbies ^^
  :-)
      ?   @     Posté le 17/07/2006 19:04:42  
Voter pour ce message
Salut, petit problème de libération de mémoire dans mon moteur 3D (opengl)
je compile des textures grace à

glGenTextures
et
gluBuild2DMipmaps

et à la supression de la texture, on a un petit

glDeleteTextures

ps : j'ai vérifié que l'id de la texture est bien le meme pour le DeleteTextures que pour le gluBuild2DMipmaps.

Seulement, la texture n'a pas l'air d'être libérée... :??:
l'effet est assez important sachant que mon terrain se charge au fur et à mesur de la progression dans le monde, et qu'il se décharge derrière...

note : je suis sur que ca vient de ca, sachant qu'il n'y a absolument aucune autre fuite mémoire (j'ai implémenté un gestionaire de mémoire qui répertorie la mémoire non libérée à la fin de l'application), et qu'il n'y a aucun pb de mémoire qd je desactive les textures.




------------------ pour ceux que ca interesse, le code ---------------
note : c'est un moteur multithread... donc le mutex est normal ^^
la texture est compilée à sa première utilisation (donnée de l'image précédement préchargée)
rendering::logOGLerror marque l'erreur spécifiée dans un fichier s'il y a eu erreur d'opengl(yen a pas qd je compile...)

GLuint texManager::getTextureID(value id)
{
criticalSection here(mutex);

vector<texture>::iterator i = _findTex(id);
if( i==textures.begin() )
return 0;

if( (*i).compiled == false )
{
GLuint type=GL_RGBA;
glGenTextures(1, &(*i).texID);
glBindTexture(GL_TEXTURE_2D, (*i).texID);

if ((*i).bpp==24)
{
type=GL_RGB;
}
gluBuild2DMipmaps( GL_TEXTURE_2D, 4, (*i).width, (*i).height, type, GL_UNSIGNED_BYTE, (*i).imageData);
glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_LINEAR);
rendering::logOGLerror("texture manager.cpp","Erreur dans glTexImage2D");
(*i).compiled = true;
free( (*i).imageData );
(*i).imageData = NULL;
}
return (*i).texID;
}


-------------------------------------------------------------------

void texManager::unloadTexture(value id)
{
if( id.evalf() == 0 )
return;
criticalSection here(mutex);
vector<texture>::iterator i = _findTex(id);
if( i == textures.begin() )
return;
(*i).use --;
if( (*i).use == 0 ) // si la texture n'est plus utilisée ...
{
if( (*i).imageData != NULL )
free((*i).imageData); // ... on l'efface
glDeleteTextures (1, &(*i).texID);
textures.erase( i );
}
}


-->Message édité par icare_olivier le 17/07/2006 23:21:16<--
icare_olivier
  arriere, band de newbies ^^
  :-)
      ?   @     Posté le 17/07/2006 23:21:21  
Voter pour ce message
problème résolu, erreur d'inatention : la supression de la texture est faite par le mauvais thread
<     1       >

01net > Forum de 01net > Programmation et développement > C/C++
> Pb: openGL & liberation mémoire textures [resolu]

Aller à :

Page générée en : 0.129s - X2board 2.2

Nous contacter | Charte de confiance | Voir notice légale

Tous droits réservés © 1999 - 2008 Groupe Tests - 01net.


Sites du réseau 01net Network : 01net - 01men - Rmc.fr - Bfmtv.fr - Radiobfm.com - TousLesPodcasts - Micro Achat

Comparatif
Suite de sécurité ou Antivirus? Comparez et choisissez la protection qui vous convient !
Jeux
Nouveauté : Créez des tenues branchées et montrez votre sens du style sur des podiums.