//virtual 
void LLViewerOctreeGroup::unbound()
{
	if (isDirty())
	{
		return;
	}

	setState(DIRTY);
	
	//all the parent nodes need to rebound this child
	if (mOctreeNode)
	{
		OctreeNode* parent = (OctreeNode*) mOctreeNode->getParent();
		while (parent != NULL)
		{
			LLViewerOctreeGroup* group = (LLViewerOctreeGroup*) parent->getListener(0);
			if (!group || group->isDirty())
			{
				return;
			}
			
			group->setState(DIRTY);
			parent = (OctreeNode*) parent->getParent();
		}
	}
}
void OctreeNode::updateObjectPosition(Object3D* object){

	OctreeNode* actualNode = object->getOctreeNode();
	actualNode->objects.remove(object);
	if(actualNode->objectsInBranch()==0){
		actualNode->clearChildren();
	}
	if (actualNode->objectFits(object)){
		actualNode->addObject(object);
		return;
	}
	OctreeNode* parent =actualNode->getParent();
	if(parent == NULL){
		actualNode->objects.push_back(object);
		return;
	}
	object->setOctreeNode(parent);
	updateObjectPosition(object);
}