Ignore:
Timestamp:
06/17/08 03:47:02 (16 years ago)
Author:
mattausch
Message:
 
File:
1 edited

Legend:

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

    r2755 r2764  
    11#include "CHCTraverser.h" 
     2#include "SceneEntity.h" 
     3 
    24 
    35namespace CHCDemo 
     
    1719void CHCTraverser::Render() 
    1820{ 
    19 #if 0 
     21        mStats.Reset(); 
     22        mRenderState->mTexturesEnabled = false; 
     23        EnqueueNode(mBvh->GetRoot()); 
     24 
    2025        QueryQueue queryQueue; 
    2126 
     
    2429        { 
    2530                while (!queryQueue.empty() &&  
    26                            (ResultAvailable(queryQueue.front()) || mDistanceQueue.empty())) 
     31                           (queryQueue.front()->ResultAvailable() || mDistanceQueue.empty())) 
    2732                { 
    28                         HierarchyNode *node = queryQueue.front(); 
     33                        OcclusionQuery *query = queryQueue.front(); 
    2934                        queryQueue.pop(); 
    3035                         
    3136                        // wait until result available 
    32                         int visiblePixels = GetOcclusionQueryResult(node); 
     37                        int visiblePixels = query->GetQueryResult(); 
    3338 
    34                         if(visiblePixels > mVisibilityThreshold) 
     39                        if (visiblePixels > mVisibilityThreshold) 
    3540                        { 
    36                                 PullUpVisibility(node); 
     41                                BvhNode *node = query->GetFrontNode(); 
     42 
     43                                mBvh->MakeParentsVisible(node); 
    3744                                TraverseNode(node); 
    3845                        } 
    3946                        else 
    4047                        { 
    41                                 mNumQueryCulledNodes ++; 
     48                                ++ mStats.mNumQueryCulledNodes; 
    4249                        } 
    4350                }        
     
    4653                if (!mDistanceQueue.empty()) 
    4754                { 
    48                         HierarchyNode *node = mDistanceQueue.top(); 
    49  
     55                        BvhNode *node = mDistanceQueue.top(); 
    5056                        mDistanceQueue.pop(); 
    5157         
    52                         mNumTraversedNodes ++; 
    53  
    54                         bool intersects; 
    55                          
    56                         if (InsideViewFrustum(node, intersects)) 
     58                        if (mBvh->IsWithinViewFrustum(node)) 
    5759                        { 
    5860                                // for near plane intersecting bounding box possible  
    5961                                // wrong results => skip occlusion query 
    60                                 if(intersects) 
     62                                if (IntersectsNearPlane(node)) 
    6163                                { 
    6264                                        // update node's visited flag 
    63                                         node->SetLastVisited(mFrameID); 
     65                                        node->SetLastVisitedFrame(mFrameID); 
    6466                                        node->SetVisible(true); 
    65                                         PullUpVisibility(node); 
     67                                        mBvh->MakeParentsVisible(node); 
     68 
    6669                                        TraverseNode(node); 
    6770                                } 
     
    6972                                {                
    7073                                        // identify previously visible nodes 
    71                                         bool wasVisible = node->Visible() && (node->LastVisited() == mFrameID - 1); 
     74                                        const bool wasVisible = node->IsVisible() && (node->GetLastVisitedFrame() == mFrameID - 1); 
    7275                                         
    7376                                        // identify nodes that we cannot skip queries for 
    74                                         bool leafOrWasInvisible = (node->LastVisited() != mFrameID) && (!wasVisible || node->IsLeaf()); 
     77                                        const bool leafOrWasInvisible =  
     78                                                (node->GetLastVisitedFrame() != mFrameID) && (!wasVisible || node->IsVirtualLeaf()); 
    7579 
    7680                                        // reset node's visibility classification  
     
    7882 
    7983                                        // update node's visited flag 
    80                                         node->SetLastVisited(mFrameID); 
     84                                        node->SetLastVisitedFrame(mFrameID); 
    8185                                         
    8286                                        // skip testing previously visible interior nodes 
    83                                         if(leafOrWasInvisible) 
     87                                        if (leafOrWasInvisible) 
    8488                                        { 
    85                                                 IssueOcclusionQuery(node, wasVisible); 
    86                                                 queryQueue.push(node); 
     89                                                OcclusionQuery *query = IssueOcclusionQuery(node, wasVisible); 
     90                                                queryQueue.push(query); 
    8791                                        } 
    8892                                         
    8993                                        // always traverse a node if it was visible 
    90                                         if(wasVisible) 
     94                                        if (wasVisible) 
    9195                                                TraverseNode(node); 
    9296                                } 
     
    9599                        { 
    96100                                // for stats 
    97                                 mNumFrustumCulledNodes ++; 
     101                                ++ mStats.mNumFrustumCulledNodes; 
    98102                        } 
    99103                } 
    100104        } 
    101 #endif 
    102105} 
    103106 
Note: See TracChangeset for help on using the changeset viewer.