diff --git a/src/content_cao.cpp b/src/content_cao.cpp index a05936d2..fe11d33d 100644 --- a/src/content_cao.cpp +++ b/src/content_cao.cpp @@ -670,6 +670,7 @@ GenericCAO::~GenericCAO() { m_env->removePlayerName(m_name.c_str()); } + removeFromScene(true); } core::aabbox3d* GenericCAO::getSelectionBox() @@ -735,7 +736,7 @@ ClientActiveObject* GenericCAO::getParent() void GenericCAO::removeFromScene(bool permanent) { - if(permanent) // Should be true when removing the object permanently and false when refreshing (eg: updating visuals) + if((m_env != 0) && (permanent)) // Should be true when removing the object permanently and false when refreshing (eg: updating visuals) { for(std::vector::iterator ci = m_children.begin(); ci != m_children.end(); ci++) diff --git a/src/player.cpp b/src/player.cpp index f2ff5902..40d40395 100644 --- a/src/player.cpp +++ b/src/player.cpp @@ -100,6 +100,7 @@ Player::Player(IGameDef *gamedef): Player::~Player() { + clearHud(); } // Horizontal acceleration (X and Z), Y direction is ignored diff --git a/src/shader.cpp b/src/shader.cpp index f855a7fe..ef15f29b 100644 --- a/src/shader.cpp +++ b/src/shader.cpp @@ -383,13 +383,16 @@ ShaderSource::ShaderSource(IrrlichtDevice *device): ShaderSource::~ShaderSource() { - //m_shader_callback->drop(); - for (std::vector::iterator iter = m_global_setters.begin(); iter != m_global_setters.end(); iter++) { delete *iter; } m_global_setters.clear(); + + if (m_shader_callback) { + m_shader_callback->drop(); + m_shader_callback = NULL; + } } u32 ShaderSource::getShader(const std::string &name,