void VisCalcFrustDist::calculateEntityVisibility() {
	if ((!m_recalculateVisibility) || ((!m_shouldCullByDistance) && (!m_shouldCullByFrustrum))) return;
	m_recalculateVisibility = false;
	visRegions = visChildren = visEntities = visNodes = 0;
	visVisToVis = visVisToInvis = visInvisToVis = visInvisToInvis = 0;
	/*
	Ogre::SceneNode* nodeRoot = LG::RendererOgre::Instance()->m_sceneMgr->getRootSceneNode();
	if (nodeRoot == NULL) return;
	// Hanging off the root node will be a node for each 'region'. A region has
	// terrain and then content nodes
	Ogre::SceneNode::ChildNodeIterator rootChildIterator = nodeRoot->getChildIterator();
	while (rootChildIterator.hasMoreElements()) {
		visRegions++;
		Ogre::Node* nodeRegion = rootChildIterator.getNext();
		// a region node has the nodes of its contents.
		calculateEntityVisibility(nodeRegion, nodeRegion, true);
	}
	*/
	std::list<Region*>regns = LG::RegionTracker::Instance()->GetRegions();
	std::list<Region*>::iterator iter;
	for (iter = regns.begin(); iter != regns.end(); iter++) {
		visRegions++;
		// the region sceneNode is a node
		Region* aRegion = *iter;
		Ogre::Node* nodeRegion = aRegion->CurrentSceneNode();
		calculateEntityVisibility(nodeRegion, nodeRegion, true);
	}
	if ((visSlowdown-- < 0) || (visVisToInvis != 0) || (visInvisToVis != 0)) {
		visSlowdown = 30;
		LG::Log("calcVisibility: regions=%d, nodes=%d, entities=%d, children=%d",
				visRegions, visNodes, visEntities, visChildren);
		LG::Log("calcVisibility: vv=%d, vi=%d, iv=%d, ii=%d",
				visVisToVis, visVisToInvis, visInvisToVis, visInvisToInvis);
	}
	LG::SetStat(LG::StatVisibleToVisible, visVisToVis);
	LG::SetStat(LG::StatVisibleToInvisible, visVisToInvis);
	LG::SetStat(LG::StatInvisibleToVisible, visInvisToVis);
	LG::SetStat(LG::StatInvisibleToInvisible, visInvisToInvis);
}