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); }