- Timestamp:
- 06/18/08 20:42:06 (16 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
GTP/trunk/App/Demos/Vis/CHC_revisited/CHCPlusPlusTraverser.cpp
r2772 r2773 16 16 { 17 17 // wait until result available 18 int visiblePixels = query->GetQueryResult(); 19 20 int visible = visiblePixels > mVisibilityThreshold; 18 const int visible = query->GetQueryResult() > mVisibilityThreshold; 21 19 22 20 BvhNode *node = query->GetFrontNode(); … … 26 24 // node was previously invisible 27 25 if (!node->IsVisible()) 26 { 27 // reset flag 28 node->SetTimesTestedInvisible(0); 28 29 node->SetAssumedVisibleFrameId(mFrameId + mAssumedVisibleFrames); 30 } 29 31 else 30 32 // randomize first invokation … … 36 38 else 37 39 { 40 node->IncTimesTestedInvisible(); 38 41 ++ mStats.mNumQueryCulledNodes; 39 42 } … … 58 61 59 62 OcclusionQuery *query = IssueOcclusionQuery(node, true); 63 60 64 mQueryQueue.push(query); 61 65 resultAvailable = mQueryQueue.front()->ResultAvailable(); … … 94 98 // identify nodes that we cannot skip queries for 95 99 const bool testFeasible = (!wasVisible || (node->IsVirtualLeaf() && (node->GetAssumedVisibleFrameId() <= mFrameId))); 100 101 // node was not recently tested => reset flag 102 if (node->GetLastVisitedFrame() != mFrameId - 1) 103 node->SetTimesTestedInvisible(0); 96 104 97 105 // update node's visited flag … … 176 184 177 185 186 OcclusionQuery * CHCPlusPlusTraverser::GetNextMultiQuery(BvhNodeQueue &iqueue) 187 { 188 OcclusionQuery *query = mQueryHandler.RequestQuery(); 189 190 float pFail = 1.0f; 191 float maxBatchVal = 0.0f; 192 float newPBatch = 1.0f; 193 float newBatchVal; 194 195 // issue next query 196 while (!iqueue.empty()) 197 { 198 BvhNode *node = iqueue.front(); 199 newPBatch *= mVisibilityPredictor.GetProbability(node); 200 201 if (query->GetNodes().empty()) 202 newBatchVal = 1.0f; 203 else 204 { 205 int newSize = query->GetSize() + 1; 206 newBatchVal = newSize / (1.0f + (1.0f - newPBatch) * newSize); 207 } 208 209 if (newBatchVal <= maxBatchVal) 210 break; 211 212 iqueue.pop(); 213 query->AddNode(node); 214 215 maxBatchVal = newBatchVal; 216 } 217 218 IssueOcclusionQuery(*query, false); 219 220 return query; 221 } 222 223 178 224 void CHCPlusPlusTraverser::IssueMultiQueries() 179 225 { … … 191 237 BvhNode *node = mIQueue.front(); 192 238 mIQueue.pop(); 193 194 OcclusionQuery *query = IssueOcclusionQuery(node, false); 239 OcclusionQuery *query = GetNextMultiQuery(mIQueue); 240 //OcclusionQuery *query = IssueOcclusionQuery(node); 241 195 242 mQueryQueue.push(query); 196 243 }
Note: See TracChangeset
for help on using the changeset viewer.