Ignore:
Timestamp:
06/18/08 18:02:05 (16 years ago)
Author:
mattausch
Message:

added randomization of the first invokation

File:
1 edited

Legend:

Unmodified
Added
Removed
  • GTP/trunk/App/Demos/Vis/CHC_revisited/CHCPlusPlusTraverser.cpp

    r2771 r2772  
    1010CHCPlusPlusTraverser::CHCPlusPlusTraverser() 
    1111{ 
     12} 
     13 
     14 
     15void CHCPlusPlusTraverser::HandleQueryResult(OcclusionQuery *query) 
     16{ 
     17        // wait until result available 
     18        int visiblePixels = query->GetQueryResult(); 
     19 
     20        int visible = visiblePixels > mVisibilityThreshold; 
     21 
     22        BvhNode *node = query->GetFrontNode(); 
     23 
     24        if (visible) 
     25        { 
     26                // node was previously invisible 
     27                if (!node->IsVisible()) 
     28                        node->SetAssumedVisibleFrameId(mFrameId + mAssumedVisibleFrames); 
     29                else 
     30                        // randomize first invokation 
     31                        node->SetAssumedVisibleFrameId(mFrameId + Random(mAssumedVisibleFrames + 1)); 
     32 
     33                mBvh->MakeParentsVisible(node); 
     34                TraverseNode(node); 
     35        } 
     36        else 
     37        { 
     38                ++ mStats.mNumQueryCulledNodes; 
     39        } 
     40 
     41        node->SetVisible(visible); 
    1242} 
    1343 
     
    3565                        mQueryQueue.pop(); 
    3666 
    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; 
    51                         } 
     67                        HandleQueryResult(query); 
    5268                }        
    5369 
     
    7894                                        // identify nodes that we cannot skip queries for 
    7995                                        const bool testFeasible = (!wasVisible || (node->IsVirtualLeaf() && (node->GetAssumedVisibleFrameId() <= mFrameId))); 
    80                                                   
    8196 
    8297                                        // update node's visited flag 
     
    86101                                        if (testFeasible) 
    87102                                        { 
    88                                                 // reset node's visibility classification  
    89                                                 node->SetVisible(false); 
    90  
    91103                                                if (!wasVisible) 
    92104                                                { 
     
    129141        } 
    130142 
     143 
    131144        ////////////// 
    132145        //-- issue remaining previously visible node queries 
     
    146159                mQueryQueue.pop(); 
    147160 
    148                 // wait until result available 
    149                 int visiblePixels = query->GetQueryResult(); 
    150  
    151                 if (visiblePixels > mVisibilityThreshold) 
    152                 { 
    153                         BvhNode *node = query->GetFrontNode(); 
    154  
    155                         node->SetVisible(true); 
    156                         mBvh->MakeParentsVisible(node); 
    157                 } 
    158                 else 
    159                 { 
    160                         ++ mStats.mNumQueryCulledNodes; 
    161                 } 
     161                HandleQueryResult(query); 
    162162        } 
    163163} 
Note: See TracChangeset for help on using the changeset viewer.