LuRenJia
09-01-2007 15:00:01
My program is a win32 form, I modified from Mogre win32Form sample. App always crash when destroying scene, even I only appended one node to scene manager(I used octree manager).
This is the destroy code:
Here is stack trace:
anyone ran into the problem too?
This is the destroy code:
// sd.Name is a SceneNode's name
SceneNode sn = (SceneNode)SceneMgr.RootSceneNode.GetChild ( sd.Name );
SceneNode.ChildNodeIterator cni = sn.GetChildIterator ();
while ( cni.MoveNext () )
{
SceneNode child = (SceneNode)cni.Current;
child.DetachAllObjects ();
}
sn.RemoveAndDestroyAllChildren (); // <---- crash
sn.DetachAllObjects ();
SceneMgr.RootSceneNode.RemoveChild ( sd.Name );
SceneMgr.DestroySceneNode ( sd.Name );
Here is stack trace:
> OgreMain_d.dll!std::_Tree<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,Ogre::SceneNode *,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> > const ,Ogre::SceneNode *> >,0> >::_Orphan_ptr(std::_Tree<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,Ogre::SceneNode *,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> > const ,Ogre::SceneNode *> >,0> > & _Cont={...}, std::_Tree_nod<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,Ogre::SceneNode *,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> > const ,Ogre::SceneNode *> >,0> >::_Node * _Ptr=0x1b391ac0) line 1278 + 0x8 bytes C++
OgreMain_d.dll!std::_Tree<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,Ogre::SceneNode *,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> > const ,Ogre::SceneNode *> >,0> >::erase(std::_Tree<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,Ogre::SceneNode *,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> > const ,Ogre::SceneNode *> >,0> >::iterator _Where=("temple",0x1b387588 {mObjectsByName=[0]() mLightList=[0]() mLightListDirty=true ...})) line 765 C++
OgreMain_d.dll!Ogre::SceneManager::destroySceneNode(const std::basic_string<char,std::char_traits<char>,std::allocator<char> > & name=<invalid pointer>) line 724 + 0x2c bytes C++
Plugin_OctreeSceneManager.dll!0e9099f4()
[...]
OgreMain_d.dll!Ogre::SceneNode::removeAndDestroyAllChildren() line 402 + 0x2f bytes C++
[...]
Mogre.dll!Mogre::SceneNode::RemoveAndDestroyAllChildren() line 193 + 0x27 bytes C++
BVR.exe!BVR.WinVRCore.DestoryScene(BVR.SceneDesc sd = {BVR.SceneDesc}) line 294 + 0xa bytes C#
BVR.exe!BVR.formMain.ExitSystem() line 129 + 0x3b bytes C#
anyone ran into the problem too?