Bonjour, je vous présente mon problème.
J'ai une scene irrlicht (faites avec IrrEdit au format *.irr) que je charge dans mon programme irrlicht, seulement je n'arrive pas à la décharger.
Lorsque je remplace le SceneNode par une autre scene l'ancienne reste.
Le but c'est de pouvoir recharger une nouvelle scene irrlicht en supprimant l'ancienne.
Je ne vois pas dutout comment faire, la fonction remove fonctionne pour mes meshs mais pas pour la scene.
Merci de votre aide.
Hors ligne
Il suffit de vider le scenemanager grâce à smgr->clear().
Hors ligne
Oui seulement à chaque fois j'ai un segmentation fault...
Voilà mon code :
CEventDebugger debug(camera,Nmodele); device->setEventReceiver(&debug); while (device->run()) { if (device->isWindowActive()) { driver->beginScene(true, true, video::SColor(0,200,200,200)); device->getGUIEnvironment()->drawAll(); smgr->drawAll(); debug.majPosCam(); if(ref == 1){ fprintf(stderr,"yoyo :"); smgr->clear(); ref = 0; } } driver->endScene(); } device->drop(); return 0;
Hors ligne
Voilà l'erreur de mémoire à disparu grâce à cette modif :
while (device->run()) { if (device->isWindowActive()) { driver->beginScene(true, true, video::SColor(0,200,200,200)); driver->draw2DImage(fond, core::position2d<s32>(0,0), core::rect<s32>(0,0,WEIGHT,HEIGHT), 0, video::SColor(255, 255, 255, 255), true); if(ref == 0) receiver.MajEventMesh(driver,font); //debug.majPosCam(); device->getGUIEnvironment()->drawAll(); smgr->drawAll(); if(ref == 0) receiver.Collide(ref); if(ref == 1){ smgr->clear(); smgr->getMeshCache()->clear(); smgr->loadScene("NG-map0.irr"); ref = 2; } } driver->endScene(); }
Le soucis maintenant c'est que je ne peux pas recharger une autre scene avec loadScene(...).
Dernière modification par AntiLoxy (06-04-2012 00:27:57)
Hors ligne
Dans ce cas essai un truc du genre :
// créé un nouveau scenemanager newsmgr = smgr->createNewSceneManager(); // detruit l'ancien scenemanager smgr->drop(); // indique au device l'emplacement mémoire utilisé par le nouveau scenemanager Device->setInputReceivingSceneManager(newsmgr);
Je n'ai pas tester le code donc pour la création du nouveau scenemanager je ne suis pas sur...
Mais bon le principe y est. Si tu as du corriger quelque chose fais part de la rectification dans ton prochain post, ça aidera certainement quelqu'un d'autre.
Dernière modification par johnplayer (06-04-2012 10:34:10)
Hors ligne
Pour vider mon scene manager sans fuite mémoire j'ai simplement rajouté cette ligne :
if(ref == 0) receiver.MajEventMesh(driver,font);
J'ai essayé ta méthode mais j'ai une erreur mémoire encore une fois.
Je voudrais simplement pouvoir recharger un mesh ou une scene apres avoir fait un smgr->clear() mais ca n'a pas l'air simple ^^.
Hors ligne
Petit up ! personne n'a une idée ?
Hors ligne
Voilà la réponse, il faut recréer une caméra apres le clear().
if(ref == 1){ sceneManager->clear(); sceneManager->addCameraSceneNodeFPS(0, 100.0f, 0.1f, -1, keyMap, 5); sceneManager->loadScene("../../media/NG-map0.irr"); ref = 0; }
Hors ligne
C'est le genre de problème qui prend 15 jours à résoudre alors que c'est tout con . Mais bon, tu as résolu ton problème, c'est le plus important.
Hors ligne
Options | Liens officiels | Caractéristiques | Statistiques | Communauté |
---|---|---|---|---|
Corrections |
|
xhtml 1.0 css 2.1 Propulsé par FluxBB Traduit par FluxBB.fr |
882 membres 1429 sujets 11119 messages |
Dernier membre inscrit: LiseBuisson96 119 invités en ligne Aucun membre connecté RSS Feed |