From 1831cc0de3dc1d7467d6b4709382b5eff49e1fc4 Mon Sep 17 00:00:00 2001 From: ZappoMan Date: Wed, 10 Jul 2013 17:06:22 -0700 Subject: [PATCH] removed level param from recursion --- interface/src/Application.cpp | 2 +- interface/src/Application.h | 2 +- interface/src/VoxelSystem.cpp | 28 +++++++++++++------------- interface/src/VoxelSystem.h | 24 +++++++++++----------- libraries/voxels/src/VoxelTree.cpp | 32 ++++++++++++------------------ libraries/voxels/src/VoxelTree.h | 8 ++++---- voxel-server/src/main.cpp | 5 ++++- 7 files changed, 49 insertions(+), 52 deletions(-) diff --git a/interface/src/Application.cpp b/interface/src/Application.cpp index be93d25af9..8950b04339 100755 --- a/interface/src/Application.cpp +++ b/interface/src/Application.cpp @@ -1298,7 +1298,7 @@ struct SendVoxelsOperationArgs { }; -bool Application::sendVoxelsOperation(VoxelNode* node, int level, void* extraData) { +bool Application::sendVoxelsOperation(VoxelNode* node, void* extraData) { SendVoxelsOperationArgs* args = (SendVoxelsOperationArgs*)extraData; if (node->isColored()) { unsigned char* nodeOctalCode = node->getOctalCode(); diff --git a/interface/src/Application.h b/interface/src/Application.h index b9ca8919b5..8ab6994981 100644 --- a/interface/src/Application.h +++ b/interface/src/Application.h @@ -170,7 +170,7 @@ private: const char* nodeTypes, int numNodeTypes); static void sendVoxelServerAddScene(); - static bool sendVoxelsOperation(VoxelNode* node, int level, void* extraData); + static bool sendVoxelsOperation(VoxelNode* node, void* extraData); static void sendVoxelEditMessage(PACKET_HEADER header, VoxelDetail& detail); static void sendAvatarVoxelURLMessage(const QUrl& url); static void processAvatarVoxelURLMessage(unsigned char *packetData, size_t dataBytes); diff --git a/interface/src/VoxelSystem.cpp b/interface/src/VoxelSystem.cpp index 0bc9b104be..791729a442 100644 --- a/interface/src/VoxelSystem.cpp +++ b/interface/src/VoxelSystem.cpp @@ -701,7 +701,7 @@ void VoxelSystem::killLocalVoxels() { } -bool VoxelSystem::randomColorOperation(VoxelNode* node, int level, void* extraData) { +bool VoxelSystem::randomColorOperation(VoxelNode* node, void* extraData) { _nodeCount++; if (node->isColored()) { nodeColor newColor = { 255, randomColorValue(150), randomColorValue(150), 1 }; @@ -717,7 +717,7 @@ void VoxelSystem::randomizeVoxelColors() { setupNewVoxelsForDrawing(); } -bool VoxelSystem::falseColorizeRandomOperation(VoxelNode* node, int level, void* extraData) { +bool VoxelSystem::falseColorizeRandomOperation(VoxelNode* node, void* extraData) { _nodeCount++; // always false colorize node->setFalseColor(255, randomColorValue(150), randomColorValue(150)); @@ -731,7 +731,7 @@ void VoxelSystem::falseColorizeRandom() { setupNewVoxelsForDrawing(); } -bool VoxelSystem::trueColorizeOperation(VoxelNode* node, int level, void* extraData) { +bool VoxelSystem::trueColorizeOperation(VoxelNode* node, void* extraData) { _nodeCount++; node->setFalseColored(false); return true; @@ -746,7 +746,7 @@ void VoxelSystem::trueColorize() { } // Will false colorize voxels that are not in view -bool VoxelSystem::falseColorizeInViewOperation(VoxelNode* node, int level, void* extraData) { +bool VoxelSystem::falseColorizeInViewOperation(VoxelNode* node, void* extraData) { const ViewFrustum* viewFrustum = (const ViewFrustum*) extraData; _nodeCount++; if (node->isColored()) { @@ -766,7 +766,7 @@ void VoxelSystem::falseColorizeInView(ViewFrustum* viewFrustum) { } // Will false colorize voxels based on distance from view -bool VoxelSystem::falseColorizeDistanceFromViewOperation(VoxelNode* node, int level, void* extraData) { +bool VoxelSystem::falseColorizeDistanceFromViewOperation(VoxelNode* node, void* extraData) { ViewFrustum* viewFrustum = (ViewFrustum*) extraData; if (node->isColored()) { float distance = node->distanceToCamera(*viewFrustum); @@ -789,7 +789,7 @@ float VoxelSystem::_minDistance = FLT_MAX; // Helper function will get the distance from view range, would be nice if you could just keep track // of this as voxels are created and/or colored... seems like some transform math could do that so // we wouldn't need to do two passes of the tree -bool VoxelSystem::getDistanceFromViewRangeOperation(VoxelNode* node, int level, void* extraData) { +bool VoxelSystem::getDistanceFromViewRangeOperation(VoxelNode* node, void* extraData) { ViewFrustum* viewFrustum = (ViewFrustum*) extraData; // only do this for truly colored voxels... if (node->isColored()) { @@ -842,7 +842,7 @@ public: // "Remove" voxels from the tree that are not in view. We don't actually delete them, // we remove them from the tree and place them into a holding area for later deletion -bool VoxelSystem::removeOutOfViewOperation(VoxelNode* node, int level, void* extraData) { +bool VoxelSystem::removeOutOfViewOperation(VoxelNode* node, void* extraData) { removeOutOfViewArgs* args = (removeOutOfViewArgs*)extraData; // If our node was previously added to the don't recurse bag, then return false to @@ -977,7 +977,7 @@ public: bool colorThis; }; -bool VoxelSystem::falseColorizeRandomEveryOtherOperation(VoxelNode* node, int level, void* extraData) { +bool VoxelSystem::falseColorizeRandomEveryOtherOperation(VoxelNode* node, void* extraData) { falseColorizeRandomEveryOtherArgs* args = (falseColorizeRandomEveryOtherArgs*)extraData; args->totalNodes++; if (node->isColored()) { @@ -1030,7 +1030,7 @@ public: bool hasIndexFound[MAX_VOXELS_PER_SYSTEM]; }; -bool VoxelSystem::collectStatsForTreesAndVBOsOperation(VoxelNode* node, int level, void* extraData) { +bool VoxelSystem::collectStatsForTreesAndVBOsOperation(VoxelNode* node, void* extraData) { collectStatsForTreesAndVBOsArgs* args = (collectStatsForTreesAndVBOsArgs*)extraData; args->totalNodes++; @@ -1182,7 +1182,7 @@ struct FalseColorizeSubTreeOperationArgs { long voxelsTouched; }; -bool VoxelSystem::falseColorizeSubTreeOperation(VoxelNode* node, int level, void* extraData) { +bool VoxelSystem::falseColorizeSubTreeOperation(VoxelNode* node, void* extraData) { if (node->getShouldRender()) { FalseColorizeSubTreeOperationArgs* args = (FalseColorizeSubTreeOperationArgs*) extraData; node->setFalseColor(args->color[0], args->color[1], args->color[2]); @@ -1191,7 +1191,7 @@ bool VoxelSystem::falseColorizeSubTreeOperation(VoxelNode* node, int level, void return true; } -bool VoxelSystem::falseColorizeOccludedOperation(VoxelNode* node, int level, void* extraData) { +bool VoxelSystem::falseColorizeOccludedOperation(VoxelNode* node, void* extraData) { FalseColorizeOccludedArgs* args = (FalseColorizeOccludedArgs*) extraData; args->totalVoxels++; @@ -1228,7 +1228,7 @@ bool VoxelSystem::falseColorizeOccludedOperation(VoxelNode* node, int level, voi subArgs.color[2] = 0; subArgs.voxelsTouched = 0; - args->tree->recurseNodeWithOperation(node, level, falseColorizeSubTreeOperation, &subArgs ); + args->tree->recurseNodeWithOperation(node, falseColorizeSubTreeOperation, &subArgs ); args->subtreeVoxelsSkipped += (subArgs.voxelsTouched - 1); args->totalVoxels += (subArgs.voxelsTouched - 1); @@ -1312,7 +1312,7 @@ void VoxelSystem::falseColorizeOccluded() { setupNewVoxelsForDrawing(); } -bool VoxelSystem::falseColorizeOccludedV2Operation(VoxelNode* node, int level, void* extraData) { +bool VoxelSystem::falseColorizeOccludedV2Operation(VoxelNode* node, void* extraData) { FalseColorizeOccludedArgs* args = (FalseColorizeOccludedArgs*) extraData; args->totalVoxels++; @@ -1349,7 +1349,7 @@ bool VoxelSystem::falseColorizeOccludedV2Operation(VoxelNode* node, int level, v subArgs.color[2] = 0; subArgs.voxelsTouched = 0; - args->tree->recurseNodeWithOperation(node, level, falseColorizeSubTreeOperation, &subArgs ); + args->tree->recurseNodeWithOperation(node, falseColorizeSubTreeOperation, &subArgs ); args->subtreeVoxelsSkipped += (subArgs.voxelsTouched - 1); args->totalVoxels += (subArgs.voxelsTouched - 1); diff --git a/interface/src/VoxelSystem.h b/interface/src/VoxelSystem.h index 0b7b271411..470ec79aa2 100644 --- a/interface/src/VoxelSystem.h +++ b/interface/src/VoxelSystem.h @@ -120,18 +120,18 @@ private: bool _renderWarningsOn; // Operation functions for tree recursion methods static int _nodeCount; - static bool randomColorOperation(VoxelNode* node, int level, void* extraData); - static bool falseColorizeRandomOperation(VoxelNode* node, int level, void* extraData); - static bool trueColorizeOperation(VoxelNode* node, int level, void* extraData); - static bool falseColorizeInViewOperation(VoxelNode* node, int level, void* extraData); - static bool falseColorizeDistanceFromViewOperation(VoxelNode* node, int level, void* extraData); - static bool getDistanceFromViewRangeOperation(VoxelNode* node, int level, void* extraData); - static bool removeOutOfViewOperation(VoxelNode* node, int level, void* extraData); - static bool falseColorizeRandomEveryOtherOperation(VoxelNode* node, int level, void* extraData); - static bool collectStatsForTreesAndVBOsOperation(VoxelNode* node, int level, void* extraData); - static bool falseColorizeOccludedOperation(VoxelNode* node, int level, void* extraData); - static bool falseColorizeSubTreeOperation(VoxelNode* node, int level, void* extraData); - static bool falseColorizeOccludedV2Operation(VoxelNode* node, int level, void* extraData); + static bool randomColorOperation(VoxelNode* node, void* extraData); + static bool falseColorizeRandomOperation(VoxelNode* node, void* extraData); + static bool trueColorizeOperation(VoxelNode* node, void* extraData); + static bool falseColorizeInViewOperation(VoxelNode* node, void* extraData); + static bool falseColorizeDistanceFromViewOperation(VoxelNode* node, void* extraData); + static bool getDistanceFromViewRangeOperation(VoxelNode* node, void* extraData); + static bool removeOutOfViewOperation(VoxelNode* node, void* extraData); + static bool falseColorizeRandomEveryOtherOperation(VoxelNode* node, void* extraData); + static bool collectStatsForTreesAndVBOsOperation(VoxelNode* node, void* extraData); + static bool falseColorizeOccludedOperation(VoxelNode* node, void* extraData); + static bool falseColorizeSubTreeOperation(VoxelNode* node, void* extraData); + static bool falseColorizeOccludedV2Operation(VoxelNode* node, void* extraData); int updateNodeInArraysAsFullVBO(VoxelNode* node); diff --git a/libraries/voxels/src/VoxelTree.cpp b/libraries/voxels/src/VoxelTree.cpp index dbd13e236a..2fa086c76f 100644 --- a/libraries/voxels/src/VoxelTree.cpp +++ b/libraries/voxels/src/VoxelTree.cpp @@ -64,7 +64,6 @@ void VoxelTree::recurseTreeWithOperationDistanceSortedTimed(PointerStack* stackO RecurseVoxelTreeOperation operation, const glm::vec3& point, void* extraData) { - int ignored = 0; long long start = usecTimestampNow(); // start case, stack empty, so start with root... @@ -75,7 +74,7 @@ void VoxelTree::recurseTreeWithOperationDistanceSortedTimed(PointerStack* stackO VoxelNode* node = (VoxelNode*)stackOfNodes->top(); stackOfNodes->pop(); - if (operation(node, ignored, extraData)) { + if (operation(node, extraData)) { //sortChildren... CLOSEST to FURTHEST // determine the distance sorted order of our children @@ -120,18 +119,16 @@ void VoxelTree::recurseTreeWithOperationDistanceSortedTimed(PointerStack* stackO // stops recursion if operation function returns false. void VoxelTree::recurseTreeWithOperation(RecurseVoxelTreeOperation operation, void* extraData) { int level = 0; - recurseNodeWithOperation(rootNode, level, operation, extraData); + recurseNodeWithOperation(rootNode, operation, extraData); } // Recurses voxel node with an operation function -void VoxelTree::recurseNodeWithOperation(VoxelNode* node, int& level, RecurseVoxelTreeOperation operation, void* extraData) { - if (operation(node, level, extraData)) { +void VoxelTree::recurseNodeWithOperation(VoxelNode* node, RecurseVoxelTreeOperation operation, void* extraData) { + if (operation(node, extraData)) { for (int i = 0; i < NUMBER_OF_CHILDREN; i++) { VoxelNode* child = node->getChildAtIndex(i); if (child) { - level++; - recurseNodeWithOperation(child, level, operation, extraData); - level--; + recurseNodeWithOperation(child, operation, extraData); } } } @@ -142,14 +139,13 @@ void VoxelTree::recurseNodeWithOperation(VoxelNode* node, int& level, RecurseVox void VoxelTree::recurseTreeWithOperationDistanceSorted(RecurseVoxelTreeOperation operation, const glm::vec3& point, void* extraData) { - int level = 0; - recurseNodeWithOperationDistanceSorted(rootNode, level, operation, point, extraData); + recurseNodeWithOperationDistanceSorted(rootNode, operation, point, extraData); } // Recurses voxel node with an operation function -void VoxelTree::recurseNodeWithOperationDistanceSorted(VoxelNode* node, int& level, RecurseVoxelTreeOperation operation, +void VoxelTree::recurseNodeWithOperationDistanceSorted(VoxelNode* node, RecurseVoxelTreeOperation operation, const glm::vec3& point, void* extraData) { - if (operation(node, level, extraData)) { + if (operation(node, extraData)) { // determine the distance sorted order of our children VoxelNode* sortedChildren[NUMBER_OF_CHILDREN]; float distancesToChildren[NUMBER_OF_CHILDREN]; @@ -174,9 +170,7 @@ void VoxelTree::recurseNodeWithOperationDistanceSorted(VoxelNode* node, int& lev if (childNode) { //printLog("recurseNodeWithOperationDistanceSorted() PROCESSING child[%d] distance=%f...\n", i, distancesToChildren[i]); //childNode->printDebugDetails(""); - level++; - recurseNodeWithOperationDistanceSorted(childNode, level, operation, point, extraData); - level--; + recurseNodeWithOperationDistanceSorted(childNode, operation, point, extraData); } } } @@ -921,7 +915,7 @@ public: bool found; }; -bool findRayIntersectionOp(VoxelNode* node, int level, void* extraData) { +bool findRayIntersectionOp(VoxelNode* node, void* extraData) { RayArgs* args = static_cast(extraData); AABox box = node->getAABox(); float distance; @@ -957,7 +951,7 @@ public: bool found; }; -bool findSpherePenetrationOp(VoxelNode* node, int level, void* extraData) { +bool findSpherePenetrationOp(VoxelNode* node, void* extraData) { SphereArgs* args = static_cast(extraData); // coarse check against bounds @@ -994,7 +988,7 @@ public: bool found; }; -bool findCapsulePenetrationOp(VoxelNode* node, int level, void* extraData) { +bool findCapsulePenetrationOp(VoxelNode* node, void* extraData) { CapsuleArgs* args = static_cast(extraData); // coarse check against bounds @@ -1672,7 +1666,7 @@ unsigned long VoxelTree::getVoxelCount() { return nodeCount; } -bool VoxelTree::countVoxelsOperation(VoxelNode* node, int level, void* extraData) { +bool VoxelTree::countVoxelsOperation(VoxelNode* node, void* extraData) { (*(unsigned long*)extraData)++; return true; // keep going } diff --git a/libraries/voxels/src/VoxelTree.h b/libraries/voxels/src/VoxelTree.h index a52e8cf491..4c0e7d33c4 100644 --- a/libraries/voxels/src/VoxelTree.h +++ b/libraries/voxels/src/VoxelTree.h @@ -17,7 +17,7 @@ #include "PointerStack.h" // Callback function, for recuseTreeWithOperation -typedef bool (*RecurseVoxelTreeOperation)(VoxelNode* node, int level, void* extraData); +typedef bool (*RecurseVoxelTreeOperation)(VoxelNode* node, void* extraData); typedef enum {GRADIENT, RANDOM, NATURAL} creationMode; #define NO_EXISTS_BITS false @@ -147,8 +147,8 @@ public: bool getShouldReaverage() const { return _shouldReaverage; } - void recurseNodeWithOperation(VoxelNode* node, int& level, RecurseVoxelTreeOperation operation, void* extraData); - void recurseNodeWithOperationDistanceSorted(VoxelNode* node, int& level, RecurseVoxelTreeOperation operation, + void recurseNodeWithOperation(VoxelNode* node, RecurseVoxelTreeOperation operation, void* extraData); + void recurseNodeWithOperationDistanceSorted(VoxelNode* node, RecurseVoxelTreeOperation operation, const glm::vec3& point, void* extraData); @@ -167,7 +167,7 @@ private: VoxelNode* node, const ViewFrustum& viewFrustum, VoxelNodeBag& bag, bool deltaViewFrustum, const ViewFrustum* lastViewFrustum); - static bool countVoxelsOperation(VoxelNode* node, int level, void* extraData); + static bool countVoxelsOperation(VoxelNode* node, void* extraData); VoxelNode* nodeForOctalCode(VoxelNode* ancestorNode, unsigned char* needleCode, VoxelNode** parentOfFoundNode) const; VoxelNode* createMissingNode(VoxelNode* lastParentNode, unsigned char* deepestCodeToCreate); diff --git a/voxel-server/src/main.cpp b/voxel-server/src/main.cpp index a5234bcd94..05d834c7df 100644 --- a/voxel-server/src/main.cpp +++ b/voxel-server/src/main.cpp @@ -415,6 +415,9 @@ void deepestLevelVoxelDistributor(NodeList* nodeList, if (nodeData->nodeBag.isEmpty()) { nodeData->updateLastKnownViewFrustum(); nodeData->setViewSent(true); + if (::debugVoxelSending) { + nodeData->map.printStats(); + } nodeData->map.erase(); // It would be nice if we could save this, and only reset it when the view frustum changes } @@ -808,7 +811,7 @@ struct CountSubTreeOperationArgs { }; -bool scanTreeWithOcclusionOperation(VoxelNode* node, int level, void* extraData) { +bool scanTreeWithOcclusionOperation(VoxelNode* node, void* extraData) { ScanTreeArgs* args = (ScanTreeArgs*) extraData;