- Timestamp:
- 06/18/08 17:33:16 (16 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
GTP/trunk/App/Demos/Vis/CHC_revisited/CHCPlusPlusTraverser.cpp
r2770 r2771 2 2 #include "RenderState.h" 3 3 4 using namespace std; 4 5 5 6 namespace CHCDemo 6 7 { 7 8 8 CHCPlusPlusTraverser::CHCPlusPlusTraverser() 9 10 CHCPlusPlusTraverser::CHCPlusPlusTraverser() 9 11 { 10 12 } … … 16 18 while (!mDistanceQueue.empty() || !mQueryQueue.empty()) 17 19 { 20 bool resultAvailable; 18 21 while (!mQueryQueue.empty() && 19 (mQueryQueue.front()->ResultAvailable() || mDistanceQueue.empty())) 20 { 21 if (mQueryQueue.front()->ResultAvailable()) 22 { 23 OcclusionQuery *query = mQueryQueue.front(); 24 mQueryQueue.pop(); 25 26 // wait until result available 27 int visiblePixels = query->GetQueryResult(); 28 29 if (visiblePixels > mVisibilityThreshold) 30 { 31 BvhNode *node = query->GetFrontNode(); 32 33 node->SetVisible(true); 34 mBvh->MakeParentsVisible(node); 35 TraverseNode(node); 36 } 37 else 38 { 39 ++ mStats.mNumQueryCulledNodes; 40 } 41 } 42 else if (!mVQueue.empty()) 22 (mDistanceQueue.empty() || (resultAvailable = mQueryQueue.front()->ResultAvailable()))) 23 { 24 while (!resultAvailable && !mVQueue.empty()) 43 25 { 44 26 BvhNode *node = mVQueue.front(); 45 27 mVQueue.pop(); 46 28 47 29 OcclusionQuery *query = IssueOcclusionQuery(node, true); 48 30 mQueryQueue.push(query); 31 resultAvailable = mQueryQueue.front()->ResultAvailable(); 32 } 33 34 OcclusionQuery *query = mQueryQueue.front(); 35 mQueryQueue.pop(); 36 37 // wait until result available 38 int visiblePixels = query->GetQueryResult(); 39 40 if (visiblePixels > mVisibilityThreshold) 41 { 42 BvhNode *node = query->GetFrontNode(); 43 44 node->SetVisible(true); 45 mBvh->MakeParentsVisible(node); 46 TraverseNode(node); 47 } 48 else 49 { 50 ++ mStats.mNumQueryCulledNodes; 49 51 } 50 52 } … … 75 77 76 78 // identify nodes that we cannot skip queries for 77 const bool testFeasible = (!wasVisible || (node->IsVirtualLeaf() /*&& (node->GetAssumedVisibleFrameId() <= mFrameId)*/));79 const bool testFeasible = (!wasVisible || (node->IsVirtualLeaf() && (node->GetAssumedVisibleFrameId() <= mFrameId))); 78 80 79 81 … … 109 111 } 110 112 113 // distance queue empty: feed the remaining multiqueries to 114 // be able to proceed traversal 111 115 if (mDistanceQueue.empty()) 112 116 { 113 // issue remaining multiqueries114 117 IssueMultiQueries(); 115 118 } 119 } 120 121 // render the rest of the objects 122 if (mUseRenderQueue) 123 { 124 if (mRenderState->SetState(RenderState::RENDER)) 125 ++ mStats.mNumStateChanges; 126 127 mRenderQueue.Render(); 128 mRenderQueue.Clear(); 116 129 } 117 130 … … 156 169 mIQueue.push(node); 157 170 158 if (mIQueue.size() > 50)171 if (mIQueue.size() > mMaxBatchSize) 159 172 { 160 173 IssueMultiQueries();
Note: See TracChangeset
for help on using the changeset viewer.