History

merge + few efficiency ameliorations to importDialog

atlante45 committed 13 years ago

Commit 3eb5ace2 parents 24531fd 86f2cbe27 files · +603 −97Browse files

Showing the changes to interface/src/VoxelSystem.cpp (1 of 27 files). Show all

Unified · Split

interface/src/VoxelSystem.cpp+24−16
@@ -66,6 +66,8 @@ VoxelSystem::VoxelSystem(float treeScale, int maxVoxels) : · 65 unmodified lines
6666 _dataSourceID = UNKNOWN_NODE_ID;
6767 _voxelServerCount = 0;
6868
69+ _viewFrustum = Application::getInstance()->getViewFrustum();
70+
6971 connect(_tree, SIGNAL(importSize(float,float,float)), SIGNAL(importSize(float,float,float)));
7072 connect(_tree, SIGNAL(importProgress(int)), SIGNAL(importProgress(int)));
7173 }
@@ -413,7 +415,7 @@ int VoxelSystem::newTreeToArrays(VoxelNode* node) { · 341 unmodified lines
413415 int voxelsUpdated = 0;
414416 bool shouldRender = false; // assume we don't need to render it
415417 // if it's colored, we might need to render it!
416− shouldRender = node->calculateShouldRender(Application::getInstance()->getViewFrustum());
418+ shouldRender = node->calculateShouldRender(_viewFrustum);
417419
418420 node->setShouldRender(shouldRender);
419421 // let children figure out their renderness
@@ -655,7 +657,7 @@ void VoxelSystem::updatePartialVBOs() { · 235 unmodified lines
655657 }
656658
657659 // if we got to the end of the array, and we're in an active dirty segment...
658− if (inSegment) {
660+ if (inSegment) {
659661 updateVBOSegment(segmentStart, _voxelsInReadArrays - 1);
660662 inSegment = false;
661663 }
@@ -832,10 +834,8 @@ bool VoxelSystem::falseColorizeInViewOperation(VoxelNode* node, void* extraData) · 170 unmodified lines
832834 }
833835
834836 void VoxelSystem::falseColorizeInView() {
835− ViewFrustum* viewFrustum = Application::getInstance()->getViewFrustum();
836−
837837 _nodeCount = 0;
838− _tree->recurseTreeWithOperation(falseColorizeInViewOperation,(void*)viewFrustum);
838+ _tree->recurseTreeWithOperation(falseColorizeInViewOperation,(void*)_viewFrustum);
839839 qDebug("setting in view false color for %d nodes\n", _nodeCount);
840840 _tree->setDirtyBit();
841841 setupNewVoxelsForDrawing();
@@ -961,15 +961,13 @@ bool VoxelSystem::getDistanceFromViewRangeOperation(VoxelNode* node, void* extra · 119 unmodified lines
961961 }
962962
963963 void VoxelSystem::falseColorizeDistanceFromView() {
964− ViewFrustum* viewFrustum = Application::getInstance()->getViewFrustum();
965−
966964 _nodeCount = 0;
967965 _maxDistance = 0.0;
968966 _minDistance = FLT_MAX;
969− _tree->recurseTreeWithOperation(getDistanceFromViewRangeOperation, (void*) viewFrustum);
967+ _tree->recurseTreeWithOperation(getDistanceFromViewRangeOperation, (void*) _viewFrustum);
970968 qDebug("determining distance range for %d nodes\n", _nodeCount);
971969 _nodeCount = 0;
972− _tree->recurseTreeWithOperation(falseColorizeDistanceFromViewOperation, (void*) viewFrustum);
970+ _tree->recurseTreeWithOperation(falseColorizeDistanceFromViewOperation, (void*) _viewFrustum);
973971 qDebug("setting in distance false color for %d nodes\n", _nodeCount);
974972 _tree->setDirtyBit();
975973 setupNewVoxelsForDrawing();
@@ -979,6 +977,7 @@ void VoxelSystem::falseColorizeDistanceFromView() { · 3 unmodified lines
979977 class removeOutOfViewArgs {
980978 public:
981979 VoxelSystem* thisVoxelSystem;
980+ ViewFrustum* thisViewFrustum;
982981 VoxelNodeBag dontRecurseBag;
983982 unsigned long nodesScanned;
984983 unsigned long nodesRemoved;
@@ -988,6 +987,7 @@ public: · 3 unmodified lines
988987
989988 removeOutOfViewArgs(VoxelSystem* voxelSystem) :
990989 thisVoxelSystem(voxelSystem),
990+ thisViewFrustum(voxelSystem->getViewFrustum()),
991991 dontRecurseBag(),
992992 nodesScanned(0),
993993 nodesRemoved(0),
@@ -1020,7 +1020,7 @@ bool VoxelSystem::removeOutOfViewOperation(VoxelNode* node, void* extraData) { · 26 unmodified lines
10201020 for (int i = 0; i < NUMBER_OF_CHILDREN; i++) {
10211021 VoxelNode* childNode = node->getChildAtIndex(i);
10221022 if (childNode) {
1023− ViewFrustum::location inFrustum = childNode->inFrustum(*Application::getInstance()->getViewFrustum());
1023+ ViewFrustum::location inFrustum = childNode->inFrustum(*args->thisViewFrustum);
10241024 switch (inFrustum) {
10251025 case ViewFrustum::OUTSIDE: {
10261026 args->nodesOutside++;
@@ -1054,9 +1054,9 @@ bool VoxelSystem::isViewChanging() { · 27 unmodified lines
10541054 bool result = false; // assume the best
10551055
10561056 // If our viewFrustum has changed since our _lastKnowViewFrustum
1057− if (!_lastKnowViewFrustum.matches(Application::getInstance()->getViewFrustum())) {
1057+ if (!_lastKnowViewFrustum.matches(_viewFrustum)) {
10581058 result = true;
1059− _lastKnowViewFrustum = *Application::getInstance()->getViewFrustum(); // save last known
1059+ _lastKnowViewFrustum = *_viewFrustum; // save last known
10601060 }
10611061 return result;
10621062 }
@@ -1070,9 +1070,9 @@ bool VoxelSystem::hasViewChanged() { · 7 unmodified lines
10701070 }
10711071
10721072 // If our viewFrustum has changed since our _lastKnowViewFrustum
1073− if (!_lastStableViewFrustum.matches(Application::getInstance()->getViewFrustum())) {
1073+ if (!_lastStableViewFrustum.matches(_viewFrustum)) {
10741074 result = true;
1075− _lastStableViewFrustum = *Application::getInstance()->getViewFrustum(); // save last stable
1075+ _lastStableViewFrustum = *_viewFrustum; // save last stable
10761076 }
10771077 return result;
10781078 }
@@ -1312,6 +1312,10 @@ void VoxelSystem::createSphere(float r,float xc, float yc, float zc, float s, bo · 233 unmodified lines
13121312 setupNewVoxelsForDrawing();
13131313 };
13141314
1315+void VoxelSystem::copySubTreeIntoNewTree(VoxelNode* startNode, VoxelSystem* destinationTree, bool rebaseToRoot) {
1316+ _tree->copySubTreeIntoNewTree(startNode, destinationTree->_tree, rebaseToRoot);
1317+}
1318+
13151319 void VoxelSystem::copySubTreeIntoNewTree(VoxelNode* startNode, VoxelTree* destinationTree, bool rebaseToRoot) {
13161320 _tree->copySubTreeIntoNewTree(startNode, destinationTree, rebaseToRoot);
13171321 }
@@ -1320,6 +1324,10 @@ void VoxelSystem::copyFromTreeIntoSubTree(VoxelTree* sourceTree, VoxelNode* dest · 2 unmodified lines
13201324 _tree->copyFromTreeIntoSubTree(sourceTree, destinationNode);
13211325 }
13221326
1327+void VoxelSystem::recurseTreeWithOperation(RecurseVoxelTreeOperation operation, void* extraData) {
1328+ _tree->recurseTreeWithOperation(operation, extraData);
1329+}
1330+
13231331 struct FalseColorizeOccludedArgs {
13241332 ViewFrustum* viewFrustum;
13251333 CoverageMap* map;
@@ -1426,7 +1434,7 @@ void VoxelSystem::falseColorizeOccluded() { · 100 unmodified lines
14261434 myCoverageMap.erase();
14271435
14281436 FalseColorizeOccludedArgs args;
1429− args.viewFrustum = Application::getInstance()->getViewFrustum();
1437+ args.viewFrustum = _viewFrustum;
14301438 args.map = &myCoverageMap;
14311439 args.totalVoxels = 0;
14321440 args.coloredVoxels = 0;
@@ -1548,7 +1556,7 @@ void VoxelSystem::falseColorizeOccludedV2() { · 115 unmodified lines
15481556 VoxelProjectedPolygon::intersects_calls = 0;
15491557
15501558 FalseColorizeOccludedArgs args;
1551− args.viewFrustum = Application::getInstance()->getViewFrustum();
1559+ args.viewFrustum = _viewFrustum;
15521560 args.mapV2 = &myCoverageMapV2;
15531561 args.totalVoxels = 0;
15541562 args.coloredVoxels = 0;