Ignore:
Timestamp:
10/21/05 19:53:30 (19 years ago)
Author:
mattausch
Message:

fixed bug in chc when traversing node two times because of priority queue. left debug info in there

Location:
trunk/VUT/GtpVisibility
Files:
4 edited

Legend:

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

    r155 r345  
    2727                if 0, the visibility is tested deterministically for each frame. 
    2828        */ 
    29         void SetAssumedVisibility(unsigned int assumedVisibility); 
     29        void SetAssumedVisibility(const unsigned int assumedVisibility); 
    3030 
    3131protected: 
     
    4040        /** Skip query for this node. 
    4141        */ 
    42         void SkipQuery(HierarchyNode *node); 
     42        void SkipQuery(HierarchyNode *node) const; 
    4343 
    4444 
  • trunk/VUT/GtpVisibility/include/HierarchyInterface.h

    r175 r345  
    4242                @param node the current node  
    4343        */ 
    44         virtual void PullUpVisibility(HierarchyNode *node) = 0; 
     44        virtual void PullUpVisibility(HierarchyNode *node) const = 0; 
    4545        /** Issue a occlusion query for this node.  
    4646                @param node the current hierarchy node 
     
    9696                @param visible the visible flag 
    9797        */ 
    98         virtual void SetNodeVisible(HierarchyNode *node, const bool visible) = 0; 
     98        virtual void SetNodeVisible(HierarchyNode *node, const bool visible) const = 0; 
    9999        /** Returns true if node has the visible flag set. See set 
    100100        */ 
     
    105105        */ 
    106106        virtual void SetLastVisited(HierarchyNode *node,  
    107                                                                 const unsigned int frameId) = 0; 
     107                                                                const unsigned int frameId) const = 0; 
    108108        /** Returns frame id when this node was last visited by the traverser. See set 
    109109        */ 
     
    122122        */ 
    123123        virtual void VisualizeCulledNode(HierarchyNode *node,  
    124                 CullingType type) = NULL; 
     124                CullingType type) const = 0; 
    125125 
    126126        /** Returns vector of visible hierarchy nodes from previous render. 
  • trunk/VUT/GtpVisibility/src/CoherentHierarchicalCullingManager.cpp

    r343 r345  
    2525        unsigned int visiblePixels = 0; 
    2626        bool isAvailable = false; 
    27         //Ogre::LogManager::getSingleton().logMessage("Coherent Hierarchical Culling"); 
     27        Ogre::LogManager::getSingleton().logMessage("Coherent Hierarchical Culling\n"); 
    2828 
    2929        //-- PART 1: process finished occlusion queries 
     
    3737                         
    3838                        queryQueue.pop(); 
     39 
     40                        std::stringstream d2; d2 << "fetch node from query queue " << node; 
     41                        Ogre::LogManager::getSingleton().logMessage(d2.str()); 
    3942 
    4043                        if (visiblePixels > mVisibilityThreshold) 
     
    6063                        mHierarchyInterface->GetQueue()->pop(); 
    6164                                 
     65                        std::stringstream d2; d2 << "fetch node from hierarchy queue " << node; 
     66                        Ogre::LogManager::getSingleton().logMessage(d2.str()); 
     67 
    6268                        bool intersects = false; 
    6369 
     
    8187                                bool wasVisible = mHierarchyInterface->IsNodeVisible(node) &&  
    8288                                        (mHierarchyInterface->LastVisited(node) == mHierarchyInterface->GetFrameId() - 1); 
    83                                          
     89                                if (mHierarchyInterface->LastVisited(node) == mHierarchyInterface->GetFrameId()) 
     90                                { 
     91                                std::stringstream d2; d2 << "!!!!lastVisited: " << mHierarchyInterface->LastVisited(node) << " " << node; 
     92                                Ogre::LogManager::getSingleton().logMessage(d2.str()); 
     93                                std::stringstream d; d << "!!!!!frameid: " << mHierarchyInterface->GetFrameId() << " " << node << "\n"; 
     94                                Ogre::LogManager::getSingleton().logMessage(d.str()); 
     95                                } 
    8496                                // if we assume node to be visible in this frame => skip query  
    8597                                // TODO: check this (not the expected speed up) 
     
    93105                // identify nodes that we cannot skip queries for 
    94106                                // geometry not only in leaves => test for renderable geometry 
    95                                 bool issueQuery = !wasVisible || mHierarchyInterface->HasGeometry(node); 
    96                                                                  
     107                                bool issueQuery = (mHierarchyInterface->LastVisited(node) != mHierarchyInterface->GetFrameId()) 
     108                                                && (!wasVisible || mHierarchyInterface->HasGeometry(node)); 
     109                                                         
    97110                                // reset node's visibility classification 
    98111                                mHierarchyInterface->SetNodeVisible(node, false); 
     
    100113                                // update node's visited flag 
    101114                                mHierarchyInterface->SetLastVisited(node, mHierarchyInterface->GetFrameId()); 
    102                          
     115 
     116                                std::stringstream d2; d2 << "lastVisited: " << mHierarchyInterface->LastVisited(node) << " " << node; 
     117                                Ogre::LogManager::getSingleton().logMessage(d2.str()); 
     118 
    103119                                // skip testing previously visible nodes without geometry 
    104120                                if (issueQuery) 
     
    113129                                if (wasVisible) 
    114130                                { 
     131                                                std::stringstream d2; d2 << "traversing node " << node; 
     132                                        Ogre::LogManager::getSingleton().logMessage(d2.str()); 
    115133                                        mHierarchyInterface->TraverseNode(node); 
    116134                                } 
     
    120138} 
    121139//----------------------------------------------------------------------- 
    122 void CoherentHierarchicalCullingManager::SetAssumedVisibility(unsigned int assumedVisibility) 
     140void CoherentHierarchicalCullingManager::SetAssumedVisibility(const unsigned int assumedVisibility) 
    123141{ 
    124142        mAssumedVisibility = assumedVisibility; 
     
    133151} 
    134152//----------------------------------------------------------------------- 
    135 bool CoherentHierarchicalCullingManager::DecideVisible(HierarchyNode *node) const 
     153inline bool CoherentHierarchicalCullingManager::DecideVisible(HierarchyNode *node) const 
    136154{ 
    137         /*bool result = rand() < mThreshold; std::stringstream d; d << "Assumed vis: " << mAssumedVisibility << ", result: " << result; 
    138         Ogre::LogManager::getSingleton().logMessage(d.str()); return result;*/ 
     155        //bool result = rand() < mThreshold; std::stringstream d; d << "Assumed vis: " << mAssumedVisibility << ", result: " << result; 
     156        //Ogre::LogManager::getSingleton().logMessage(d.str()); return result; 
    139157         
    140158        return rand() < mThreshold; 
    141159} 
    142160//----------------------------------------------------------------------- 
    143 void CoherentHierarchicalCullingManager::SkipQuery(HierarchyNode *node) 
     161inline void CoherentHierarchicalCullingManager::SkipQuery(HierarchyNode *node) const 
    144162{ 
    145163        // -- set node to be visible in this frame, then traverse it 
     164        std::stringstream d2; d2 << "skipping node " << node; 
     165                                        Ogre::LogManager::getSingleton().logMessage(d2.str()); 
    146166        mHierarchyInterface->SetLastVisited(node, mHierarchyInterface->GetFrameId()); 
    147  
     167         
     168        mHierarchyInterface->SetNodeVisible(node, true); 
    148169        mHierarchyInterface->PullUpVisibility(node);                     
    149170        mHierarchyInterface->TraverseNode(node); 
  • trunk/VUT/GtpVisibility/src/StopAndWaitCullingManager.cpp

    r259 r345  
    1818 
    1919                bool intersects = false; 
    20  
     20         
     21                //if (mHierarchyInterface->HasGeometry(node) && (!mHierarchyInterface->IsLeaf(node))) ++ mNumFrustumCulledNodes; 
     22                                //      Ogre::LogManager::getSingleton().logMessage("no geometry"); 
     23                        //else if (!mHierarchyInterface->IsLeaf(node)) ++ mNumQueriesIssued;//  Ogre::LogManager::getSingleton().logMessage("has geometry"); 
     24/*if (!mHierarchyInterface->HasGeometry(node)) 
     25                                        Ogre::LogManager::getSingleton().logMessage("no geometry"); 
     26                                else    Ogre::LogManager::getSingleton().logMessage("has geometry");*/ 
    2127                if (!mHierarchyInterface->CheckFrustumVisible(node, intersects)) 
    2228                { 
     
    3642                else 
    3743                { 
    38  
    3944                        ++ mNumQueriesIssued; 
    4045 
Note: See TracChangeset for help on using the changeset viewer.