forked from Mirrorlandia_minetest/minetest
Make sure none of the irrlicht member objects of GenericCAO are deleted prior deletion of GenericCAO
This commit is contained in:
parent
3c5df42a17
commit
1367895ae2
@ -751,6 +751,7 @@ void GenericCAO::removeFromScene(bool permanent)
|
|||||||
if(m_meshnode)
|
if(m_meshnode)
|
||||||
{
|
{
|
||||||
m_meshnode->remove();
|
m_meshnode->remove();
|
||||||
|
m_meshnode->drop();
|
||||||
m_meshnode = NULL;
|
m_meshnode = NULL;
|
||||||
}
|
}
|
||||||
if(m_animated_meshnode)
|
if(m_animated_meshnode)
|
||||||
@ -762,8 +763,15 @@ void GenericCAO::removeFromScene(bool permanent)
|
|||||||
if(m_spritenode)
|
if(m_spritenode)
|
||||||
{
|
{
|
||||||
m_spritenode->remove();
|
m_spritenode->remove();
|
||||||
|
m_spritenode->drop();
|
||||||
m_spritenode = NULL;
|
m_spritenode = NULL;
|
||||||
}
|
}
|
||||||
|
if (m_textnode)
|
||||||
|
{
|
||||||
|
m_textnode->remove();
|
||||||
|
m_textnode->drop();
|
||||||
|
m_textnode = NULL;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void GenericCAO::addToScene(scene::ISceneManager *smgr, ITextureSource *tsrc,
|
void GenericCAO::addToScene(scene::ISceneManager *smgr, ITextureSource *tsrc,
|
||||||
@ -787,6 +795,7 @@ void GenericCAO::addToScene(scene::ISceneManager *smgr, ITextureSource *tsrc,
|
|||||||
infostream<<"GenericCAO::addToScene(): single_sprite"<<std::endl;
|
infostream<<"GenericCAO::addToScene(): single_sprite"<<std::endl;
|
||||||
m_spritenode = smgr->addBillboardSceneNode(
|
m_spritenode = smgr->addBillboardSceneNode(
|
||||||
NULL, v2f(1, 1), v3f(0,0,0), -1);
|
NULL, v2f(1, 1), v3f(0,0,0), -1);
|
||||||
|
m_spritenode->grab();
|
||||||
m_spritenode->setMaterialTexture(0,
|
m_spritenode->setMaterialTexture(0,
|
||||||
tsrc->getTexture("unknown_node.png"));
|
tsrc->getTexture("unknown_node.png"));
|
||||||
m_spritenode->setMaterialFlag(video::EMF_LIGHTING, false);
|
m_spritenode->setMaterialFlag(video::EMF_LIGHTING, false);
|
||||||
@ -852,6 +861,7 @@ void GenericCAO::addToScene(scene::ISceneManager *smgr, ITextureSource *tsrc,
|
|||||||
buf->drop();
|
buf->drop();
|
||||||
}
|
}
|
||||||
m_meshnode = smgr->addMeshSceneNode(mesh, NULL);
|
m_meshnode = smgr->addMeshSceneNode(mesh, NULL);
|
||||||
|
m_meshnode->grab();
|
||||||
mesh->drop();
|
mesh->drop();
|
||||||
// Set it to use the materials of the meshbuffers directly.
|
// Set it to use the materials of the meshbuffers directly.
|
||||||
// This is needed for changing the texture in the future
|
// This is needed for changing the texture in the future
|
||||||
@ -861,6 +871,7 @@ void GenericCAO::addToScene(scene::ISceneManager *smgr, ITextureSource *tsrc,
|
|||||||
infostream<<"GenericCAO::addToScene(): cube"<<std::endl;
|
infostream<<"GenericCAO::addToScene(): cube"<<std::endl;
|
||||||
scene::IMesh *mesh = createCubeMesh(v3f(BS,BS,BS));
|
scene::IMesh *mesh = createCubeMesh(v3f(BS,BS,BS));
|
||||||
m_meshnode = smgr->addMeshSceneNode(mesh, NULL);
|
m_meshnode = smgr->addMeshSceneNode(mesh, NULL);
|
||||||
|
m_meshnode->grab();
|
||||||
mesh->drop();
|
mesh->drop();
|
||||||
|
|
||||||
m_meshnode->setScale(v3f(m_prop.visual_size.X,
|
m_meshnode->setScale(v3f(m_prop.visual_size.X,
|
||||||
@ -912,6 +923,7 @@ void GenericCAO::addToScene(scene::ISceneManager *smgr, ITextureSource *tsrc,
|
|||||||
scene::IMesh *mesh = manip->createMeshUniquePrimitives(item_mesh);
|
scene::IMesh *mesh = manip->createMeshUniquePrimitives(item_mesh);
|
||||||
|
|
||||||
m_meshnode = smgr->addMeshSceneNode(mesh, NULL);
|
m_meshnode = smgr->addMeshSceneNode(mesh, NULL);
|
||||||
|
m_meshnode->grab();
|
||||||
mesh->drop();
|
mesh->drop();
|
||||||
|
|
||||||
m_meshnode->setScale(v3f(m_prop.visual_size.X/2,
|
m_meshnode->setScale(v3f(m_prop.visual_size.X/2,
|
||||||
@ -939,6 +951,7 @@ void GenericCAO::addToScene(scene::ISceneManager *smgr, ITextureSource *tsrc,
|
|||||||
std::wstring wname = narrow_to_wide(m_name);
|
std::wstring wname = narrow_to_wide(m_name);
|
||||||
m_textnode = smgr->addTextSceneNode(gui->getBuiltInFont(),
|
m_textnode = smgr->addTextSceneNode(gui->getBuiltInFont(),
|
||||||
wname.c_str(), video::SColor(255,255,255,255), node);
|
wname.c_str(), video::SColor(255,255,255,255), node);
|
||||||
|
m_textnode->grab();
|
||||||
m_textnode->setPosition(v3f(0, BS*1.1, 0));
|
m_textnode->setPosition(v3f(0, BS*1.1, 0));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user