source: GTP/trunk/Lib/Vis/OnlineCullingCHC/OGRE/include/OgreOcclusionCullingSceneManager.h @ 675

Revision 675, 5.3 KB checked in by mattausch, 18 years ago (diff)
Line 
1#ifndef _OcclusionCullingSceneManager_H__
2#define _OcclusionCullingSceneManager_H__
3
4#include <OgreSceneNode.h>
5#include <OgreTerrainSceneManager.h>
6#include <OgreOctreeNode.h>
7#include <OgreOctreeCamera.h>
8#include <OgrePrerequisites.h>
9
10#include "OgreOctreeHierarchyInterface.h"
11#include "OgrePlatformQueryManager.h"
12#include "VisibilityManager.h"
13
14
15namespace Ogre {
16
17/**
18        This class extends the terrain scene manager,
19        using occlusion queries for visibility culling.
20*/
21class __declspec(dllexport) OcclusionCullingSceneManager: public TerrainSceneManager
22{
23public:
24        OcclusionCullingSceneManager(GtpVisibility::VisibilityManager *visManager);
25        ~OcclusionCullingSceneManager();
26
27        void _renderVisibleObjects();
28        void _findVisibleObjects(Camera* cam, bool onlyShadowCasters);
29        void _updateSceneGraph(Camera* cam);
30
31        /** Sets the given option for the SceneManager
32                @remarks Options are: "Algorithm", int *;                       
33        */
34       
35        virtual bool setOption(const String &, const void *);
36        /** Gets the given option for the Scene VisibilityManager.
37            @remarks
38                See setOption
39        */
40        virtual bool getOption(const String &, void *);
41
42        bool getOptionValues(const String & key, StringVector &refValueList);
43        bool getOptionKeys(StringVector &refKeys);
44
45        /** Sets the visibility manager.
46                @param visManager the visibility manager
47        */
48        void setVisibilityManager(GtpVisibility::VisibilityManager *visManager);
49        /** See set.
50        */
51        GtpVisibility::VisibilityManager *getVisibilityManager();
52
53        /** Render a set of objects, see renderSingleObject for param definitions
54                Override so we can handle delayed rendering of transparent objects
55        */
56        virtual void renderObjects(const RenderPriorityGroup::TransparentRenderablePassList& objs,
57            bool doLightIteration, const LightList* manualLightList = 0);
58
59        /** Writes out stats into the Ogre log file.
60        */
61        void WriteLog();
62
63        /** Override pass so we can do the z-fail pass.
64        */
65        Pass* setPass(Pass* pass);
66
67        /** Override from SceneManager so we can skip all but first pass for depth pass.
68        */
69        bool validatePassForRendering(Pass* pass);
70
71        void RenderItemBuffer(RenderPriorityGroup* pGroup);
72        void RenderSingleObjectForItemBuffer(Renderable *rend, Pass *pass);
73        void renderQueueGroupObjects(RenderQueueGroup* pGroup);
74
75        /** Override from SceneManager so that sub entities can be assigned an id for item buffer.
76        */
77        Entity* createEntity(const String& entityName, const String& meshName);
78
79        /** Returns pointer to visibility manager.
80        */
81        GtpVisibility::VisibilityManager *GetVisibilityManager();
82
83        /** Returns hierarchy interface.
84        */
85        OctreeHierarchyInterface *GetHierarchyInterface();
86
87        /** Inherited from scene manager. Neccesary to draw terrain properly.
88        */
89        void endFrame();
90
91        void renderAdditiveStencilShadowedQueueGroupObjects(RenderQueueGroup* pGroup);
92        void renderModulativeStencilShadowedQueueGroupObjects(RenderQueueGroup* pGroup);
93
94        /** Override standard function so octree boxes are always of equal side length.
95                This has advantages for CHC, because terrain tiles are in different octree nodes
96                and can be culled.
97        */
98        void setWorldGeometry( const String& filename );
99
100protected:
101       
102        /** Creates material for depth pass, e.g., a pass that only fills the depth buffer.
103        */
104        void InitDepthPass();
105        /** Creates material for item buffer.
106        */
107        void InitItemBufferPass();
108        /** Fills render queue so that a visualization can be rendered.
109        */
110        void PrepareVisualization(Camera *cam);
111        /** Initialises necessary parameters for hierarchical visibility culling.
112        */
113        void InitVisibilityCulling(Camera *cam);
114
115        /// the interface to the scene hierarchy.
116        OctreeHierarchyInterface *mHierarchyInterface;
117        /// manages all visibility options
118        GtpVisibility::VisibilityManager *mVisibilityManager;
119
120        /// if a visualization of the hierarchical culling is shown
121        bool mShowVisualization;
122
123        /// if the culled nodes are indicated in the visualization
124        bool mVisualizeCulledNodes;
125
126        /// if symbols for the nodes are shown in the visualization
127        bool mRenderNodesForViz;
128        /// if content of the nodes is shown in the visualization
129        bool mRenderNodesContentForViz;
130
131        /// if we render transparents after the hierarchical traversal
132        bool mDelayRenderTransparents;
133
134        /// if we use a depth pass (i.e., fill only the depth buffer in the first pass)
135        bool mUseDepthPass;
136        /// if we currently rendering the depth pass
137        bool mIsDepthPassPhase;
138       
139        /// if we use an item buffer for rendering (i.e., object ids as color codes
140        bool mUseItemBuffer;
141        /// if we currently render the item buffer
142        bool mIsItemBufferPhase;
143
144        /// if depth write should be enabled
145        bool mEnableDepthWrite;
146        /// if transparents are skipped during rendering
147        bool mSkipTransparents;
148
149        /// the depth pass (no lighting, just filling the depth buffer)
150        Pass *mDepthPass;
151        Pass *mItemBufferPass;
152
153        int mCurrentEntityId;
154        /// flag for passes which should not be deleted from queue during first traversal
155        int mLeavePassesInQueue;
156
157        /// if transparent object are considered for item buffer visibility
158        bool mRenderTransparentsForItemBuffer;
159        /// Always execute the vertex program of a pass, e.g., for the depth pass or item buffer
160        bool mExecuteVertexProgramForAllPasses;
161
162        bool mIsHierarchicalCulling;
163};
164
165} // namespace Ogre
166
167#endif // CullingTerrainSceneManager_H
Note: See TracBrowser for help on using the repository browser.