Changeset 86 for trunk/VUT/GtpVisibility


Ignore:
Timestamp:
05/06/05 01:39:32 (20 years ago)
Author:
mattausch
Message:
 
Location:
trunk/VUT/GtpVisibility
Files:
6 edited

Legend:

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

    r85 r86  
    3636                @returns occlusion query for this node 
    3737        */ 
    38         virtual OcclusionQuery *IssueOcclusionQuery(HierarchyNode *node) = 0; 
     38        virtual OcclusionQuery *IssueOcclusionQuery(HierarchyNode *node,  
     39                const bool wasVisible = false) = 0; 
    3940        /** Sets the root of the scene hierarchy. 
    4041                @param root the hierarchy root 
     
    105106        */ 
    106107        unsigned int GetNumRenderedNodes(); 
     108        /** Optimization when issuing occlusion test: test is done with actual geometry  
     109                rather than the bounding box 
     110                @param useOptimization if the optimization should be used 
     111        */ 
     112        void SetUseOptimization(bool useOptimization); 
    107113 
    108114protected: 
    109115         
     116        bool mUseOptimization; 
    110117        unsigned int mFrameId; 
    111118 
  • trunk/VUT/GtpVisibility/include/OcclusionQuery.h

    r59 r86  
    99{ 
    1010public: 
    11 //      OcclusionQuery(); 
    1211        virtual ~OcclusionQuery() {}; 
    1312        /** Returns the result of an occlusion query in terms of visible pixels. 
    14                 @returns number of visible pixels 
     13                @param queryResult the number of visible pixels if the result was available 
     14                @param waitForResult if we should wait for the result until available 
     15                @returns if the result was already available 
    1516        */ 
    16         virtual unsigned int GetQueryResult() const = 0; 
    17         /** Returns true if the result of the query is available, false otherwise. 
    18                 @returns if result is available 
    19         */ 
    20         virtual bool ResultAvailable() const = 0; 
     17        virtual bool GetQueryResult(unsigned int &queryResult,  
     18                const bool waitForResult) const = 0; 
    2119        /** Begins occlusion query. 
    2220                @remark the query counts the number of visible pixels between it's begin and end 
  • trunk/VUT/GtpVisibility/src/CoherentHierarchicalCullingManager.cpp

    r85 r86  
    11#include "CoherentHierarchicalCullingManager.h" 
    2 //#include <windows.h> 
     2#include <windows.h> 
    33 
    44namespace GtpVisibility { 
     
    88{ 
    99        mNumFrustumCulledNodes = mNumQueryCulledNodes = 0; 
    10         //OutputDebugString("Coherent Culling\n"); 
     10//      OutputDebugString("Coherent Culling\n"); 
    1111 
    1212        QueryQueue queryQueue; 
    13          
     13        unsigned int visiblePixels = 0; 
     14        bool isAvailable = false; 
     15 
    1416        //-- PART 1: process finished occlusion queries 
    1517        while (!mHierarchyInterface->GetQueue()->empty() || !queryQueue.empty()) 
    1618        { 
    1719                while (!queryQueue.empty() &&  
    18                            (queryQueue.front().second->ResultAvailable() || mHierarchyInterface->GetQueue()->empty())) 
     20                           queryQueue.front().second->GetQueryResult(visiblePixels,  
     21                                                                        mHierarchyInterface->GetQueue()->empty())) 
    1922                { 
    2023                        HierarchyNode *node = queryQueue.front().first; 
    21                                          
    22                         // wait until result available 
    23                         unsigned int visiblePixels = queryQueue.front().second->GetQueryResult(); 
    24                          
     24                                                 
    2525                        queryQueue.pop(); 
    2626 
     
    6767                                 
    6868                                // identify nodes that we cannot skip queries for 
    69                                 bool mustQuery = !wasVisible || mHierarchyInterface->HasGeometry(node) || mHierarchyInterface->IsLeaf(node); 
     69                                bool mustQuery = !wasVisible || mHierarchyInterface->HasGeometry(node) ||  
     70                                        mHierarchyInterface->IsLeaf(node); 
    7071 
    7172                                // reset node's visibility classification  
     
    7879                                if (mustQuery) 
    7980                                { 
    80                                         queryQueue.push(QueryPair(node, mHierarchyInterface->IssueOcclusionQuery(node))); 
     81                                        queryQueue.push(QueryPair(node,  
     82                                                mHierarchyInterface->IssueOcclusionQuery(node, wasVisible))); 
    8183                                } 
    8284                                         
  • trunk/VUT/GtpVisibility/src/FrustumCullingManager.cpp

    r85 r86  
    11#include "FrustumCullingManager.h" 
    2 //#include <windows.h> 
     2#include <windows.h> 
    33 
    44namespace GtpVisibility { 
  • trunk/VUT/GtpVisibility/src/HierarchyInterface.cpp

    r85 r86  
    88HierarchyInterface::HierarchyInterface():  
    99mFrameId(0), mNumTraversedNodes(0), mNumRenderedNodes(0),  
    10 mSceneRoot(0), mPreviousNode(0), mCurrentTestIdx(0) 
     10mSceneRoot(0), mPreviousNode(0), mCurrentTestIdx(0), mUseOptimization(true) 
    1111{        
    1212        mDistanceQueue = new DistanceQueue(GreaterDistance<HierarchyNode *>(this)); 
     
    6464        return mNumRenderedNodes; 
    6565} 
     66 
     67void HierarchyInterface::SetUseOptimization(bool useOptimization) 
     68{ 
     69        mUseOptimization = useOptimization; 
     70} 
     71 
    6672} // namespace GtpVisibility 
  • trunk/VUT/GtpVisibility/src/StopAndWaitCullingManager.cpp

    r85 r86  
    11#include "StopAndWaitCullingManager.h" 
    2 //#include <windows.h> 
     2#include <windows.h> 
    33 
    44namespace GtpVisibility { 
     
    3535                        } 
    3636 
     37                        unsigned int visiblePixels = 0; 
     38 
     39                        mHierarchyInterface->IssueOcclusionQuery(node)->GetQueryResult(visiblePixels, true); 
     40 
    3741                        // node visible 
    38                         if (mHierarchyInterface->IssueOcclusionQuery(node)->GetQueryResult() >  
    39                                 mVisibilityThreshold) 
     42                        if (visiblePixels > mVisibilityThreshold) 
    4043                        { 
    4144                                mHierarchyInterface->TraverseNode(node); 
Note: See TracChangeset for help on using the changeset viewer.