source: GTP/trunk/Lib/Vis/OnlineCullingCHC/src/VisibilityManager.cpp @ 2280

Revision 2280, 4.0 KB checked in by mattausch, 17 years ago (diff)

removed dependency on ogre in gtpvisibility

Line 
1#include "VisibilityManager.h"
2#include "StopAndWaitCullingManager.h"
3#include "CoherentHierarchicalCullingManager.h"
4#include "FrustumCullingManager.h"
5#include "DummyPreprocessingManager.h"
6#include "RandomUpdateCullingManager.h"
7#include "CullingLogManager.h"
8
9
10namespace GtpVisibility {
11
12//-----------------------------------------------------------------------
13VisibilityManager::VisibilityManager(VisibilityEnvironment *visEnvironment):
14mVisibilityThreshold(0),
15mCullingManager(NULL),
16mQueryManager(NULL),
17mPreprocessingManager(new DummyPreprocessingManager(NULL)),
18mVisibilityEnvironment(visEnvironment),
19mAssumedVisibilityForChc(0)
20{
21#if 1
22        SetCullingManager(VisibilityEnvironment::COHERENT_HIERARCHICAL_CULLING);
23#endif
24#if 0   
25        SetCullingManager(VisibilityEnvironment::STOP_AND_WAIT_CULLING);
26#endif
27#if 0
28        SetCullingManager(VisibilityEnvironment::FRUSTUM_CULLING);
29#endif
30}
31//-----------------------------------------------------------------------
32VisibilityManager::~VisibilityManager()
33{
34        delete mCullingManager;
35        delete mPreprocessingManager;
36        CullingLogManager::DelSingleton();
37}
38//-----------------------------------------------------------------------
39void VisibilityManager::SetCullingManager(VisibilityEnvironment::
40                                                                                  CullingManagerType ocmType)
41{
42        // change only if necessary
43        if (!mCullingManager || (mCullingManagerType != ocmType))
44        {
45                // delete old culling manager
46                if (mCullingManager)
47                {
48                        delete mCullingManager;
49                }
50
51                mCullingManagerType = ocmType;
52               
53                switch (ocmType)
54                {
55                case VisibilityEnvironment::STOP_AND_WAIT_CULLING:
56                        mCullingManager = new StopAndWaitCullingManager();
57                        break;
58
59                case VisibilityEnvironment::COHERENT_HIERARCHICAL_CULLING:
60                        mCullingManager = new CoherentHierarchicalCullingManager(mAssumedVisibilityForChc);
61                        break;
62
63                case VisibilityEnvironment::FRUSTUM_CULLING:
64                        //mCullingManager = new FrustumCullingManager();
65                        mCullingManager = new RandomUpdateCullingManager();
66                        break;
67
68                default:
69                        mCullingManager = new CoherentHierarchicalCullingManager(mAssumedVisibilityForChc);
70                        break;
71
72                }
73
74                /////////
75                //-- set threshold
76                mCullingManager->SetVisibilityThreshold(mVisibilityThreshold); 
77        }
78}
79//-----------------------------------------------------------------------
80void VisibilityManager::SetVisibilityCullingThreshold(unsigned int visibilityThreshold)
81{
82        mVisibilityThreshold = visibilityThreshold;
83        mCullingManager->SetVisibilityThreshold(mVisibilityThreshold);
84}
85//-----------------------------------------------------------------------
86CullingManager *VisibilityManager::GetCullingManager()
87{
88        return mCullingManager;
89}
90//-----------------------------------------------------------------------
91void VisibilityManager::ApplyVisibilityCulling()
92{
93        mCullingManager->RenderScene();
94}
95//-----------------------------------------------------------------------
96VisibilityEnvironment::CullingManagerType VisibilityManager::GetCullingManagerType()
97{
98        return mCullingManagerType;
99}
100//-----------------------------------------------------------------------
101void VisibilityManager::SetQueryManager(QueryManager *queryManager)
102{
103        mQueryManager = queryManager;
104}
105//-----------------------------------------------------------------------
106QueryManager *VisibilityManager::GetQueryManager()
107{
108        return mQueryManager;
109}
110//-----------------------------------------------------------------------
111void VisibilityManager::SetAssumedVisibilityForChc(unsigned int assumedVisibility)
112                                                                         
113{
114        mAssumedVisibilityForChc = assumedVisibility;
115
116        // in case we currently use chc
117        if (VisibilityManager::GetCullingManagerType() ==
118                VisibilityEnvironment::COHERENT_HIERARCHICAL_CULLING)
119        {
120                static_cast<CoherentHierarchicalCullingManager *>(mCullingManager)->
121                                SetAssumedVisibility(assumedVisibility);
122        }
123}
124//-----------------------------------------------------------------------
125VisibilityEnvironment *VisibilityManager::GetVisibilityEnvironment()
126{
127        return mVisibilityEnvironment;
128}
129
130} // namespace GtpVisibility
Note: See TracBrowser for help on using the repository browser.