Changeset 87 for trunk/VUT/GtpVisibility


Ignore:
Timestamp:
05/09/05 01:24:02 (20 years ago)
Author:
mattausch
Message:
 
Location:
trunk/VUT/GtpVisibility
Files:
8 edited

Legend:

Unmodified
Added
Removed
  • trunk/VUT/GtpVisibility/include/CullingManager.h

    r74 r87  
    3838        */ 
    3939        unsigned int GetNumQueryCulledNodes(); 
     40        /** Returns number of issued occlusion queries. 
     41        */ 
     42        unsigned int GetNumQueriesIssued(); 
     43        /** basic initializations on beginning of each frame, e.g.,  
     44                resets statistics. 
     45        */ 
     46        void InitFrame(); 
    4047 
    4148protected: 
    42  
     49         
    4350        unsigned int mNumQueryCulledNodes; 
    4451        unsigned int mNumFrustumCulledNodes; 
    4552        unsigned int mVisibilityThreshold; 
     53        unsigned int mNumQueriesIssued; 
    4654 
    4755        HierarchyInterface *mHierarchyInterface; 
  • trunk/VUT/GtpVisibility/include/DistanceQueue.h

    r59 r87  
    2525        bool operator() (T v1, T v2) const 
    2626        { 
    27                 return mHierarchyInterface->HasGreaterDistance(v1, v2); 
     27                return mHierarchyInterface->GetSquaredDistance(v1) > mHierarchyInterface->GetSquaredDistance(v2); 
    2828        } 
    2929                 
  • trunk/VUT/GtpVisibility/include/HierarchyInterface.h

    r86 r87  
    5959        */ 
    6060        DistanceQueue *GetQueue(); 
    61         /** Returns true if node 1 has greater distance to the view 
    62                 plane than node 2. 
    63                 @param node1 the first node to be compared 
    64                 @param node2 the second node to be compared 
     61        /** Returns distance of the node to the view plane. 
     62                @param node1 the hierarchy node 
    6563        */                       
    66         virtual bool HasGreaterDistance(HierarchyNode *node1, HierarchyNode *node2) const = 0; 
     64        virtual float GetSquaredDistance(HierarchyNode *node) const = 0; 
    6765        /** Checks if the node is visible from the current view frustum. 
    6866                @param node the current node 
  • trunk/VUT/GtpVisibility/include/OcclusionQuery.h

    r86 r87  
    2020                @remark the query counts the number of visible pixels between it's begin and end 
    2121        */ 
    22         virtual void BeginQuery() const = 0; 
     22        virtual void BeginQuery() = 0; 
    2323        /** Ends occlusion query. 
    2424        */ 
    25         virtual void EndQuery() const = 0; 
     25        virtual void EndQuery() = 0; 
    2626}; 
    2727 
  • trunk/VUT/GtpVisibility/src/CoherentHierarchicalCullingManager.cpp

    r86 r87  
    77void CoherentHierarchicalCullingManager::RenderScene() 
    88{ 
    9         mNumFrustumCulledNodes = mNumQueryCulledNodes = 0; 
    10 //      OutputDebugString("Coherent Culling\n"); 
     9        InitFrame(); 
    1110 
    1211        QueryQueue queryQueue; 
    1312        unsigned int visiblePixels = 0; 
    1413        bool isAvailable = false; 
    15  
     14         
    1615        //-- PART 1: process finished occlusion queries 
    1716        while (!mHierarchyInterface->GetQueue()->empty() || !queryQueue.empty()) 
     
    2120                                                                        mHierarchyInterface->GetQueue()->empty())) 
    2221                { 
     22            //if (mHierarchyInterface->GetQueue()->empty())OutputDebugString("empty\n"); 
     23                                                                 
    2324                        HierarchyNode *node = queryQueue.front().first; 
    2425                                                 
     
    3536                        } 
    3637                } 
    37  
     38                 
    3839                //-- PART 2: hierarchical traversal 
    3940                if (!mHierarchyInterface->GetQueue()->empty()) 
     
    6768                                 
    6869                                // identify nodes that we cannot skip queries for 
    69                                 bool mustQuery = !wasVisible || mHierarchyInterface->HasGeometry(node) ||  
    70                                         mHierarchyInterface->IsLeaf(node); 
     70                                // geometry not only in leaves => test for renderable geometry 
     71                                bool issueQuery = !wasVisible || mHierarchyInterface->HasGeometry(node); 
     72                                        //mHierarchyInterface->IsLeaf(node); 
    7173 
    7274                                // reset node's visibility classification  
     
    7678                                mHierarchyInterface->SetLastVisited(node, mHierarchyInterface->GetFrameId()); 
    7779                         
    78                                 // skip testing previously visible interior nodes 
    79                                 if (mustQuery) 
     80                                // skip testing previously visible nodes without geometry 
     81                                if (issueQuery) 
    8082                                { 
    81                                         queryQueue.push(QueryPair(node,  
    82                                                 mHierarchyInterface->IssueOcclusionQuery(node, wasVisible))); 
     83                                        mNumQueriesIssued ++; 
     84 
     85                                        queryQueue.push(QueryPair(node, mHierarchyInterface-> 
     86                                                IssueOcclusionQuery(node, wasVisible))); 
    8387                                } 
    8488                                         
  • trunk/VUT/GtpVisibility/src/CullingManager.cpp

    r74 r87  
    66CullingManager::CullingManager(): 
    77mHierarchyInterface(NULL), mVisibilityThreshold(0), mNumQueryCulledNodes(0),  
    8 mNumFrustumCulledNodes(0) 
     8mNumFrustumCulledNodes(0), mNumQueriesIssued(0) 
    99{ 
    1010} 
     
    2929        return mNumQueryCulledNodes; 
    3030} 
     31//----------------------------------------------------------------------- 
     32unsigned int CullingManager::GetNumQueriesIssued() 
     33{ 
     34        return mNumQueriesIssued; 
     35} 
     36//----------------------------------------------------------------------- 
     37void CullingManager::InitFrame() 
     38{ 
     39        mNumFrustumCulledNodes = mNumQueryCulledNodes = mNumQueriesIssued = 0; 
     40} 
    3141} // namespace GtpVisibility 
  • trunk/VUT/GtpVisibility/src/FrustumCullingManager.cpp

    r86 r87  
    77void FrustumCullingManager::RenderScene() 
    88{ 
    9         mNumFrustumCulledNodes = mNumQueryCulledNodes = 0; 
    10         //OutputDebugString("Frustum Culling\n"); 
     9        InitFrame(); 
    1110 
    1211        while (!mHierarchyInterface->GetQueue()->empty()) 
  • trunk/VUT/GtpVisibility/src/StopAndWaitCullingManager.cpp

    r86 r87  
    77void StopAndWaitCullingManager::RenderScene() 
    88{ 
    9         mNumFrustumCulledNodes = mNumQueryCulledNodes = 0; 
    10         //OutputDebugString("Stop and Wait Culling\n"); 
    11  
     9        InitFrame(); 
     10                         
    1211        while (!mHierarchyInterface->GetQueue()->empty()) 
    1312        { 
    1413                HierarchyNode *node = mHierarchyInterface->GetQueue()->top(); 
    1514                mHierarchyInterface->GetQueue()->pop(); 
    16                  
     15                         
    1716                // interesting for visualization purpose 
    1817                mHierarchyInterface->SetNodeVisible(node, false); 
     
    3534                        } 
    3635 
     36                        mNumQueriesIssued ++; 
     37 
    3738                        unsigned int visiblePixels = 0; 
    3839 
Note: See TracChangeset for help on using the changeset viewer.