destroying mScene , mWorld [SOLVED]

deshan

02-01-2010 05:35:05

Hi
I am destroying the NxOgre related things as following in my destructor

if(mRenderSystem)
delete mRenderSystem; //Ogre3dRenderSystem*
if(mScene)
mWorld->destroyScene(mScene); //NxOgre::Scene*
if(mWorld)
mWorld->destroyWorld(); // NxOgre::World*

But whenever I have scenegeometry
mScene->createSceneGeometry(...);
the program breaks. It breaks at this line

//nxOgreArray.h
static inline void removeAll(SharedArray* shared_array, bool delete_them)
{
if (delete_them)
{
TIterator begin = shared_array->_First, last = shared_array->_Last;
for (;begin != last; ++begin)
{
NxOgre_Delete((*begin)); //-- > break
}
}
shared_array->_Last = shared_array->_First;
}


Do I need to destroy all scenegeometries manually before destroying the mscene?

spacegaier

07-01-2010 12:54:27

One thing that just came to my mind (but could be totally wrong): Does the scene parts (in your case e.g. Ogre3DBody) rely on the Ogre3DRenderer? You could testwise change the order in which you clean up, so first delete the scene and the world and then finally the Renderer.

Just a thought, haven't verified it...

deshan

07-01-2010 16:47:29

Problem solved, please read.
Ok Thank you for answering spacegaier.
As you said I tried to delete the rendered last. But it gave me error at
// nxogrearray.h
void remove(T* t)
{
TWrite::remove(_T, TRead::where(_T, t), false);
}

Following delete order works for me.
if(mRenderSystem)
delete mRenderSystem;
if(mScene)
mWorld->destroyScene(mScene);
if(mWorld)
mWorld->destroyWorld();


And creating of scene geometries. Upto now what I have done is create single NxOgre::TriangleGeometry and made multiple scene geometries using that single scene geometry as following.
NxOgre::Mesh* artilaryMeshNxs = NxOgre::MeshManager::getSingleton()->load("media:artilaryGun.nxs");
NxOgre::TriangleGeometry* artilaryGeometry = new NxOgre::TriangleGeometry(artilaryMeshNxs);
for(...)
{
mScene->createSceneGeometry(artilaryGeometry, NxOgre::Matrix44(NxOgre::Vec3(*iterator)));
}


Now I have tried to create unique NxOgre::TriangleGeometry for each scene geometry as follows.
NxOgre::Mesh* artilaryMeshNxs = NxOgre::MeshManager::getSingleton()->load("media:artilaryGun.nxs");

for(...)
{
NxOgre::TriangleGeometry* artilaryGeometry = new NxOgre::TriangleGeometry(artilaryMeshNxs);
mScene->createSceneGeometry(artilaryGeometry, NxOgre::Matrix44(NxOgre::Vec3(*iterator)));
}

Now deleting is ok. No errors. :)

One more question. As I understand I don't need to manulaly delete all NxOgre::TriangleGeometry* right? NxOgre do that for me in removeAll right?
NxOgre_Delete((*begin));

Finally I would like to thanx spacegaier for making such a awesome framework AOF(Advance Ogre Framework) http://www.ogre3d.org/wiki/index.php/Ad ... _Framework

I have just completed integrating NxOgre to AOF.
Thank you