source: GTP/trunk/Lib/Vis/OnlineCullingCHC/OGRE/src/OgreVisibilitySceneManager.cpp @ 925

Revision 925, 4.8 KB checked in by mattausch, 18 years ago (diff)

update for ogre 1.2
OcclusionCullingSceneManager? is the only scenemanager in the solution now

Line 
1#include <OgreMath.h>
2#include <OgreIteratorWrappers.h>
3#include <OgreRenderSystem.h>
4#include <OgreCamera.h>
5#include "OgreVisibilitySceneManager.h"
6#include "OgreSceneNodeHierarchyInterface.h"
7#include "OgreVisibilityOptionsManager.h"
8
9
10namespace Ogre {
11
12//-----------------------------------------------------------------------
13VisibilitySceneManager::VisibilitySceneManager(const String& name,
14                                                                                           GtpVisibility::VisibilityManager *visManager)
15:SceneManager(name),
16mVisibilityManager(visManager),
17mUseDepthPass(false),
18mShowVisualization(false)
19{
20        mHierarchyInterface = new SceneNodeHierarchyInterface(this, mDestRenderSystem);
21}
22//-----------------------------------------------------------------------
23VisibilitySceneManager::~VisibilitySceneManager()
24{
25        delete mHierarchyInterface;
26}
27//-----------------------------------------------------------------------
28void VisibilitySceneManager::_findVisibleObjects(Camera* cam, bool onlyShadowCasters)
29{
30        mHierarchyInterface->SetOnlyShadowCasters(onlyShadowCasters);
31        // does nothing if hierarchical culling is used =>
32        // we interleave identification and rendering of objects
33        // in _renderVisibibleObjects
34        if (!mUseDepthPass)
35        {
36                SceneManager::_findVisibleObjects(cam, onlyShadowCasters);
37                return;
38        }
39}
40//-----------------------------------------------------------------------
41void VisibilitySceneManager::_renderVisibleObjects()
42{
43        if (!mShowVisualization)
44        {
45                mHierarchyInterface->SetHierarchyRoot(mSceneRoot);
46                mHierarchyInterface->InitTraversal(mCameraInProgress);
47
48                // reset culling manager stats
49                mVisibilityManager->GetCullingManager()->InitFrame(mVisualizeCulledNodes);
50        }
51
52        // standard terrain scenemanager rendering without hierarchical culling
53        if (!mUseDepthPass || mShowVisualization)
54        {       
55                SceneManager::_renderVisibleObjects();
56       
57                return;
58        }
59
60        //-- hierarchical culling
61        // the objects of different layers (e.g., background, scene,
62        // overlay) must be identified and rendered one after another
63
64        //-- render background
65        clearSpecialCaseRenderQueues();
66        addSpecialCaseRenderQueue(RENDER_QUEUE_BACKGROUND);
67        addSpecialCaseRenderQueue(RENDER_QUEUE_SKIES_EARLY);
68
69        setSpecialCaseRenderQueueMode(SceneManager::SCRQM_INCLUDE);
70        SceneManager::_renderVisibleObjects();
71
72#ifdef GTP_VISIBILITY_MODIFIED_OGRE
73        _deleteRenderedQueueGroups();
74#endif
75
76        //-- render visible objects (i.e., all but overlay)
77        clearSpecialCaseRenderQueues();
78        addSpecialCaseRenderQueue(RENDER_QUEUE_OVERLAY);
79        setSpecialCaseRenderQueueMode(SceneManager::SCRQM_EXCLUDE);
80
81
82        /**
83        * the hierarchical culling algorithm
84        **/
85        mVisibilityManager->ApplyVisibilityCulling();
86
87
88#ifdef GTP_VISIBILITY_MODIFIED_OGRE
89        _deleteRenderedQueueGroups();
90#endif
91
92        //-- render overlay
93        clearSpecialCaseRenderQueues();
94        SceneManager::_renderVisibleObjects();
95
96        //WriteLog(); // write out stats
97}
98//-----------------------------------------------------------------------
99void VisibilitySceneManager::_updateSceneGraph(Camera* cam)
100{
101        mVisibilityManager->GetCullingManager()->SetHierarchyInterface(mHierarchyInterface);
102        mHierarchyInterface->SetRenderSystem(mDestRenderSystem);
103       
104        SceneManager::_updateSceneGraph(cam);
105}
106//-----------------------------------------------------------------------
107bool VisibilitySceneManager::setOption(const String & key, const void * val)
108{
109        return VisibilityOptionsManager(mVisibilityManager, mHierarchyInterface).
110                setOption(key, val) || SceneManager::setOption(key, val);
111}
112//-----------------------------------------------------------------------
113bool VisibilitySceneManager::getOption(const String & key, void *val)
114{
115        if (key == "NumHierarchyNodes")
116        {
117                * static_cast<unsigned int *>(val) = (unsigned int)mSceneNodes.size();
118                return true;
119        }
120       
121        return VisibilityOptionsManager(mVisibilityManager, mHierarchyInterface).
122                getOption(key, val) && SceneManager::getOption(key, val);
123}
124//-----------------------------------------------------------------------
125bool VisibilitySceneManager::getOptionValues(const String & key, StringVector  &refValueList)
126{
127        return SceneManager::getOptionValues(key, refValueList);
128}
129//-----------------------------------------------------------------------
130bool VisibilitySceneManager::getOptionKeys(StringVector & refKeys)
131{
132        return VisibilityOptionsManager(mVisibilityManager, mHierarchyInterface).
133                getOptionKeys(refKeys) || SceneManager::getOptionKeys(refKeys);
134}
135//-----------------------------------------------------------------------
136void VisibilitySceneManager::setVisibilityManager(GtpVisibility::VisibilityManager *visManager)
137{
138        mVisibilityManager = visManager;
139}
140//-----------------------------------------------------------------------
141GtpVisibility::VisibilityManager *VisibilitySceneManager::getVisibilityManager()
142{
143        return mVisibilityManager;
144}
145
146} // namespace Ogre
Note: See TracBrowser for help on using the repository browser.