Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2759 connectés 

  FORUM HardWare.fr
  Programmation
  C++

  [opengl]Pb: liberation mémoire textures [RESOLU]

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[opengl]Pb: liberation mémoire textures [RESOLU]

n°1408155
icareo
Posté le 17-07-2006 à 20:50:09  profilanswer
 

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.
 
 
 

Code :
  1. //------------------ pour ceux que ca interesse, le code ---------------
  2. //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...)
  3. GLuint texManager::getTextureID(value id)
  4. {
  5. criticalSection here(mutex);
  6. vector<texture>::iterator i = _findTex(id);
  7. if( i==textures.begin() )
  8. return 0;
  9. if( (*i).compiled == false )
  10. {
  11. GLuint type=GL_RGBA;
  12. glGenTextures(1, &(*i).texID);
  13. glBindTexture(GL_TEXTURE_2D, (*i).texID);
  14. if ((*i).bpp==24)
  15. {
  16. type=GL_RGB;
  17. }
  18. gluBuild2DMipmaps( GL_TEXTURE_2D, 4, (*i).width, (*i).height, type, GL_UNSIGNED_BYTE, (*i).imageData);
  19. glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
  20. glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_LINEAR);
  21. rendering::logOGLerror("texture manager.cpp","Erreur dans glTexImage2D" );
  22. (*i).compiled = true;
  23. free( (*i).imageData );
  24. (*i).imageData = NULL;
  25. }
  26. return (*i).texID;
  27. }
  28. //-------------------------------------------------------------------
  29. void texManager::unloadTexture(value id)
  30. {
  31. if( id.evalf() == 0 )
  32. return;
  33. criticalSection here(mutex);
  34. vector<texture>::iterator i = _findTex(id);
  35. if( i == textures.begin() )
  36. return;
  37. (*i).use --;
  38. if( (*i).use == 0 ) // si la texture n'est plus utilisée ...
  39. {
  40. if( (*i).imageData != NULL )
  41. free((*i).imageData); // ... on l'efface
  42. glDeleteTextures (1, &(*i).texID);
  43. textures.erase( i );
  44. }
  45. }


Message édité par icareo le 17-07-2006 à 23:20:36

---------------
tutos de programmation 3D :
mood
Publicité
Posté le 17-07-2006 à 20:50:09  profilanswer
 

n°1408296
icareo
Posté le 17-07-2006 à 23:20:13  profilanswer
 

problème résolu, erreur d'inatention : la supression de la texture est faite par le mauvais thread


---------------
tutos de programmation 3D :
n°1408333
SBAM
Best recording of rach 3.
Posté le 18-07-2006 à 00:33:56  profilanswer
 

Au fait,

Code :
  1. ->

c'est super pratique, essayes  :o

n°1408731
icareo
Posté le 18-07-2006 à 17:19:01  profilanswer
 

lol ... la blague.
c'est par choix que j'utilise "*" pour les iterators... histoire de les differencier des classes instanciées ...  
merci du conseil quand même ;)


---------------
tutos de programmation 3D :

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C++

  [opengl]Pb: liberation mémoire textures [RESOLU]

 

Sujets relatifs
copier une plage de cellule résoluWxWidgets/Opengl/Linux
[Résolu][C# .net] SqlDataReader ne contenant rien => exception[VBA] RESOLU Extraction d'une chaine de caractères
[Resolu] [C] GPIB transfert et acquisitionProblème avec les textures en opengl
[Résolu TOUT SEUL] [GTK+] Installation sous CodeBlocksanalyseur de code pour dépassement mémoire
[Résolu] Parcourir les éléments de mon formulaire 
Plus de sujets relatifs à : [opengl]Pb: liberation mémoire textures [RESOLU]


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR