void OctreeSceneStats::didntFit(const OctreeElementPointer element) { _didntFit++; if (element->isLeaf()) { _leavesDidntFit++; } else { _internalDidntFit++; } }
void OctreeSceneStats::colorSent(const OctreeElementPointer element) { _colorSent++; if (element->isLeaf()) { _leavesColorSent++; } else { _internalColorSent++; } }
void OctreeSceneStats::traversed(const OctreeElementPointer element) { _traversed++; if (element->isLeaf()) { _leaves++; } else { _internal++; } }
void OctreeSceneStats::skippedOccluded(const OctreeElementPointer element) { _skippedOccluded++; if (element->isLeaf()) { _leavesSkippedOccluded++; } else { _internalSkippedOccluded++; } }
// handles staging or deletion of all deep children bool OctreeElement::safeDeepDeleteChildAtIndex(int childIndex, int recursionCount) { bool deleteApproved = false; if (recursionCount > DANGEROUSLY_DEEP_RECURSION) { static QString repeatedMessage = LogHandler::getInstance().addRepeatedMessageRegex( "OctreeElement::safeDeepDeleteChildAtIndex\\(\\) reached DANGEROUSLY_DEEP_RECURSION, bailing!"); qCDebug(octree) << "OctreeElement::safeDeepDeleteChildAtIndex() reached DANGEROUSLY_DEEP_RECURSION, bailing!"; return deleteApproved; } OctreeElementPointer childToDelete = getChildAtIndex(childIndex); if (childToDelete) { if (childToDelete->deleteApproved()) { // If the child is not a leaf, then call ourselves recursively on all the children if (!childToDelete->isLeaf()) { // delete all it's children for (int i = 0; i < NUMBER_OF_CHILDREN; i++) { if (childToDelete->getChildAtIndex(i)) { deleteApproved = childToDelete->safeDeepDeleteChildAtIndex(i,recursionCount+1); if (!deleteApproved) { break; // no point in continuing... } } } } else { deleteApproved = true; // because we got here after checking that delete was approved } if (deleteApproved) { deleteChildAtIndex(childIndex); _isDirty = true; markWithChangedTime(); } } } return deleteApproved; }