#0 

18-03-2011 16:06:34

Metallizer
Abonné
Lieu: Région Parisienne
Date d'inscription: 07-01-2007
Messages: 100
Site web

Salut à tous,

J'aimerais récolter des avis et éventuels conseils sur comment charger des mesh et des textures pour une scène.

Jusqu'à maintenant, j'utilise IVideoDriver::getTexture() pour les textures et ISceneManager::getMesh() pour les meshes.
Mais ces fonctions permettent donc d'obtenir un pointeur vers des textures ou des meshes et si ces derniers ne sont pas encore chargés, ils le sont grâce à ces fonctions.
Aussi pratique que soit getTexture et getMesh, je me suis posé la question de l'occupation mémoire et si change souvent de scène, je vais me retrouver un moment avec une saturation de la mémoire dû au chargement de texture ou de meshes qui en fait ne sont plus utilisés.

Du coup j'ai voulu savoir si dans le destructeur de mes scènes, je ne pouvais pas explicitement décharger les textures et meshes qui ont été chargés au début de ces dites scènes.
Vu qu'on ne peut pas "dropper" les pointeurs obtenus par des fonctions "get", j'ai cru que je pouvais en revanche utiliser IVideoDriver::removeAllTextures() mais son comportement est étrange, certaines textures sont déchargés, mais quand je reviens sur la scène que je venais de quitter, elles ne se rechargent pas, pire, ça finit en faute de segmentation au bout de quelques allers retours.

Voilà du coup mon interrogation est de savoir comment faire pour décharger les textures qui l'ont été, sans oublier celles qui ont été chargées grâce à un fichier matérial fourni à côté du mesh, ce qui arrive très souvent. Idem pour les meshes, comment les charger de la mémoire ?

Peut être que la procédure de chargement doit être refaite... mais comment ?

Merci d'avance pour vos réponses.

Hors ligne


#1 

30-03-2011 13:23:09

Metallizer
Abonné
Lieu: Région Parisienne
Date d'inscription: 07-01-2007
Messages: 100
Site web

Salut à tous,

Petit message pour interpeller éventuellement les personnes sur ce forum.
Pas d'idée sur une bonne pratique de chargement/déchargement de textures ou meshes ?

Merci smile

Hors ligne


#2 

30-03-2011 17:48:18

Metallizer
Abonné
Lieu: Région Parisienne
Date d'inscription: 07-01-2007
Messages: 100
Site web

Bon je viens de trouver une solution, j'avais déjà eu cette piste avant de demander de l'aide ici mais le résultat était très aléatoire et conduisait même à une faute de segmentation.

Donc, visiblement Irrlicht est doté de caches, ce qui parait logique.

IVideoDriver::removeAllTextures() permet donc de décharger toutes les textures en mémoire (chargées avec getTexture par exemple)

mais surtout, si on a chargé des meshes qui utilisent ces textures, il ne faut pas oublier de les décharger eux aussi :

IMeshCache::clear() permet de décharger les meshes en mémoire.
On peut récupérer le Mesh Cache avec ISceneManager::getMeshCache().

Voilou, si ça peut aider quelqu'un.

Hors ligne


#3 

30-03-2011 18:28:59

tmyke
Administrateur
Date d'inscription: 24-03-2008
Messages: 1025

c'est bien tu t'es répondu à toi même smile

Infos ceci dit qui en intéresseront plus d'un je pense wink


Force et sagesse...

Hors ligne


Options Liens officiels Caractéristiques Statistiques Communauté
Corrections
irrlicht
irrklang
irredit
irrxml
xhtml 1.0
css 2.1
Propulsé par FluxBB
Traduit par FluxBB.fr
883 membres
1429 sujets
11121 messages
Dernier membre inscrit: Saidov17
96 invités en ligne
Aucun membre connecté
RSS Feed