source: trunk/VUT/work/iv/IVFrameListener.h @ 259

Revision 259, 6.2 KB checked in by mattausch, 19 years ago (diff)

refined measurements

Line 
1#ifndef _IVFrameListener_H__
2#define _IVFrameListener_H__
3
4#include "CEGUIForwardRefs.h"
5#include <Ogre.h>
6#include <OgreKeyEvent.h>
7#include <OgreEventListeners.h>
8#include <OgreStringConverter.h>
9#include <OgreException.h>
10#include "VisibilityEnvironment.h"
11#include "VisibilityManager.h"
12
13
14
15class TestCullingIVApplication;
16
17
18using namespace Ogre;
19
20
21/** Frame listener specialised for terrains.
22*/
23class IVFrameListener: public FrameListener, public MouseListener,
24                                                        public MouseMotionListener, public KeyListener
25{
26public:
27
28        IVFrameListener(RenderWindow* win,
29                                                Camera* cam,
30                                                SceneManager *sceneManager,
31                                                CEGUI::Renderer *renderer,
32                                                Camera *vizCamera,
33                                                SceneNode *camNode,
34                                                Light *sunLight,
35                                                TestCullingIVApplication *app);
36
37        ~IVFrameListener();
38
39
40        bool frameStarted(const FrameEvent& evt);
41        bool frameEnded(const FrameEvent& evt);
42   //bool processUnbufferedKeyInput(const FrameEvent& evt);
43   
44
45        /* MouseListener callbacks. */
46        virtual void mouseClicked(MouseEvent* e) { }
47        virtual void mouseEntered(MouseEvent* e) { }
48        virtual void mouseExited(MouseEvent* e)  { }
49
50        // This is when the mouse button goes DOWN.
51        void mousePressed(MouseEvent* e);
52
53        // This is when the mouse button is let UP.
54        void mouseReleased(MouseEvent* e);
55
56        /* MouseMotionListener callbacks */
57        void mouseMoved(MouseEvent *e);
58
59        // This is when the mouse is clicked, held and dragged.
60        void mouseDragged(MouseEvent *e);
61
62        void mouseDragDropped(MouseEvent *e);
63        void keyPressed(KeyEvent* e);
64
65        void keyReleased(KeyEvent* e);
66        void keyClicked(KeyEvent* e);
67
68        /** The information about camera position and orienation per frame.
69        */
70        typedef struct
71        {
72                Vector3 position;
73                Quaternion orientation;
74                Real timeElapsed;
75        } frame_info;
76
77        enum  {WALKTHROUGH, REPLAY, STATE_NUM};
78
79        // visualization modes for scene nodes
80        enum {NODEVIZ_NONE, NODEVIZ_RENDER_NODES, NODEVIZ_RENDER_NODES_AND_CONTENT, NODEVIZ_MODES_NUM};
81        //enum {NODEVIZ_NONE, NODEVIZ_RENDER_GEOMETRY, NODEVIZ_MODES_NUM};
82
83        void zoomVizCamera(int zoom);
84
85        void addFrameInfo(SceneNode *camNode, Real timeElapsed);
86        void setCurrentFrameInfo(Real timeElapsed);
87
88        void setAlgorithm(int algorithm);
89
90        void moveCamera();
91
92        void writeFrames();
93        void loadFrames();
94
95        bool processUnbufferedKeyInput(const FrameEvent& evt);
96        bool processUnbufferedMouseInput(const FrameEvent& evt);
97
98        void showStats(bool show);
99
100        void updateStats();
101        void toggleShowHelp();
102        void toggleShowStats();
103
104        void toggleShowShadows();
105        void toggleDisplayCameraDetails();
106        void takeScreenshot();
107        void nextSceneDetailLevel();
108        void nextFilter();
109        void nextAlgorithm();
110        void nextNodeVizMode();
111        void nextAppState();
112        void changeThreshold(int incr);
113        void changeAssumedVisibility(int incr);
114        void toggleTestGeometryForVisibleLeaves();
115        void toggleShowOctree();
116        void toggleUseDepthPass();
117        void toggleShowViz();
118        void toggleRecord();
119
120        bool Clamp2Floor();
121
122        static String msAlgorithmCaptions[];
123               
124        protected:
125
126        void initHelpOverlayElement(String name, int top);
127        void initOverlayElement(OverlayElement **elInfo, String ext, String name,
128                                                        int top, String caption);
129
130        //-- initialise overlays
131        void initHelpOverlay();
132        void initVisStatsOverlay();
133        void initQueryOverlay();
134
135        void resetStats();
136
137        SceneManager *mSceneMgr;           // A pointer to the scene manager
138
139        CEGUI::Renderer *mGUIRenderer;     // cegui renderer
140
141        int mCurrentAlgorithm;
142        int mVisibilityThreshold;
143        int mAssumedVisibility;
144        // the current frame number
145        int mCurrentFrame;
146        // the current application state
147        int mAppState;
148        // visualization mode
149        int mNodeVizMode;
150
151
152        OverlayElement *mAlgorithmInfo;
153        OverlayElement *mThresholdInfo;
154        OverlayElement *mAssumedVisibilityInfo;
155        OverlayElement *mFrustumCulledNodesInfo;
156        OverlayElement *mQueryCulledNodesInfo;
157        OverlayElement *mTraversedNodesInfo;
158        OverlayElement *mHierarchyNodesInfo;
159        OverlayElement *mTestGeometryForVisibleLeavesInfo;
160        OverlayElement *mUseDepthPassInfo;
161        OverlayElement *mRenderedNodesInfo;
162        OverlayElement *mObjectsCountInfo;
163        OverlayElement *mQueriesIssuedInfo;
164        OverlayElement *mDelayedQueriesIssuedInfo;
165        OverlayElement *mDelayedTraversedNodesInfo;
166        OverlayElement *mCurrentObjectTypeInfo;
167
168        OverlayElement *mQueryTypeInfo;
169        OverlayElement *mQueryVisibleNodesInfo;
170        OverlayElement *mQueryVisibleGeometryInfo;
171        OverlayElement *mQueryVisiblePatchInfo;
172
173        OverlayElement *mQueryVisiblityInfo;
174        OverlayElement *mQueryNodeVisibilityInfo;
175        OverlayElement *mQueryGeometryVisibilityInfo;
176        OverlayElement *mQueryPatchVisibilityInfo;
177        //OverlayElement *mHelpInfo;
178       
179        bool mTestGeometryForVisibleLeaves;
180        bool mShowOctree;
181        bool mUseDepthPass;
182        bool mShowVisualization;
183        bool mCullCamera;
184        bool mRecordFrames;
185        bool mShowShadows;
186        bool mVisualizeCulledNodes;
187        bool mShowHelp;
188        bool mStatsOn;
189        bool mLMouseDown, mRMouseDown;     // True if the mouse buttons are down
190        bool mShutdownRequested;
191        bool mDisplayCameraDetails;
192        bool mUseItemBuffer;
193        bool mUseAnimation;
194
195        int mItemBufferMode;
196
197        Real mVizCameraHeight;
198
199        Camera *mVizCamera;
200        SceneNode *mCamNode;
201
202        std::vector<frame_info> mFrameInfo;
203               
204        Real mReplayTimeElapsed;
205        //EventProcessor* mEventProcessor;
206        InputReader* mInputDevice;
207        Camera* mCamera;
208
209        Vector3 mTranslateVector;
210        RenderWindow* mWindow;
211
212        unsigned int mNumScreenShots;
213        int mSceneDetailIndex;
214        int mAniso;
215
216        float mMoveScale;
217        Real mMoveSpeed;
218        Degree mRotScale;
219
220        // just to stop toggles flipping too fast
221        Real mTimeDelay;
222        Radian mRotX, mRotY;
223        TextureFilterOptions mFiltering;
224
225        Degree mRotateSpeed;
226
227        Overlay* mDebugOverlay;
228        Overlay* mHelpOverlay;
229        Overlay* mCullStatsOverlay;
230        Overlay* mQueryOverlay;
231
232        Light *mSunLight;
233        GtpVisibility::VisibilityManager *mVisibilityManager;
234        EventProcessor* mEventProcessor;
235
236        bool mShiftPressed;
237        bool mShowQueryStats;
238
239        unsigned long mAccumulatedFps;
240        unsigned long mAccumulatedTris;
241        unsigned long mFrameCount;
242
243        //bool mUseBufferedInputKeys, mUseBufferedInputMouse, mInputTypeSwitchingOn;
244       
245        float mDelayedQueriesIssued;
246        float mDelayedTraversedNodes;
247
248        TestCullingIVApplication *mApplication;
249        RaySceneQuery *mRaySceneQuery;
250};
251
252
253#endif //_IVFrameListener_H__
Note: See TracBrowser for help on using the repository browser.