Pages: 1
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
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
Hors ligne
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
c'est bien tu t'es répondu à toi même
Infos ceci dit qui en intéresseront plus d'un je pense
Hors ligne
Pages: 1