source: trunk/VUT/OcclusionCullingSceneManager/TestCulling/TestCullingApplication.h @ 28

Revision 28, 5.5 KB checked in by gametools, 19 years ago (diff)
Line 
1/**
2    \file
3        TestCullingApplication.h
4*/
5#include "CEGUIForwardRefs.h"
6#include "ExampleApplication.h"
7#include "OgreOcclusionCullingSceneManager.h"
8
9Real timeDelay = 0;
10#define KEY_PRESSED(_key,_timeDelay, _macro) \
11{ \
12    if (mInputDevice->isKeyDown(_key) && timeDelay <= 0) \
13{ \
14    timeDelay = _timeDelay; \
15    _macro ; \
16} \
17}
18
19String mAlgorithmTypeCaptions[OcclusionCullingSceneManager::NUM_RENDERMODES] =
20{
21    "Cull Frustum",
22        "Stop and Wait",
23        "Coherent Occlusion Culling"
24};
25
26class MouseQueryListener : public ExampleFrameListener, public MouseListener, public MouseMotionListener
27{
28public:
29
30    MouseQueryListener(RenderWindow* win, Camera* cam, SceneManager *sceneManager, CEGUI::Renderer *renderer,
31                                           SceneNode* shipNode)
32        : ExampleFrameListener(win, cam, false, true), mGUIRenderer(renderer), mShipNode(shipNode)//,  mShutdownRequested(false)
33    {
34
35                // Setup default variables
36        mCurrentObject = NULL;
37        mLMouseDown = false;
38        mRMouseDown = false;
39        mSceneMgr = sceneManager;
40
41        // Reduce move speed
42        mMoveSpeed = 50;
43        mRotateSpeed *= 2;
44       
45                mAlgorithmType = OcclusionCullingSceneManager::RENDER_COHERENT;
46
47                // Register this so that we get mouse events.
48        mEventProcessor->addMouseListener(this);
49        mEventProcessor->addMouseMotionListener(this);
50                mEventProcessor->addKeyListener(this);
51
52                // show overlay
53        Overlay* pOver = OverlayManager::getSingleton().getByName("Example/ShadowsOverlay");   
54        mAlgorithmInfo = OverlayManager::getSingleton().getOverlayElement("Example/Shadows/ShadowTechniqueInfo");
55        //mMaterialInfo = OverlayManager::getSingleton().getOverlayElement("Example/Shadows/MaterialInfo");
56        //mInfo = OverlayManager::getSingleton().getOverlayElement("Example/Shadows/Info");
57
58                mAlgorithmInfo->setCaption("Algorithm: " + mAlgorithmTypeCaptions[mAlgorithmType]);
59        //mMaterialInfo->setCaption("Current: " + mAtheneMaterials[mCurrentAtheneMaterial]);
60        pOver->show();
61    } // MouseQueryListener
62
63    ~MouseQueryListener( )
64    {
65    }
66
67   bool frameEnded(const FrameEvent& evt)
68    {
69        if (timeDelay >= 0)
70            timeDelay -= evt.timeSinceLastFrame;
71
72        KEY_PRESSED(KC_O, 1, changeAlgorithm());
73     
74        return ExampleFrameListener::frameStarted(evt) && ExampleFrameListener::frameEnded(evt);       
75    }
76
77    /* MouseListener callbacks. */
78    virtual void mouseClicked(MouseEvent* e) { }
79    virtual void mouseEntered(MouseEvent* e) { }
80    virtual void mouseExited(MouseEvent* e)  { }
81
82    // This is when the mouse button goes DOWN.
83    virtual void mousePressed(MouseEvent* e);
84
85    // This is when the mouse button is let UP.
86    virtual void mouseReleased(MouseEvent* e);
87
88    /* MouseMotionListener callbacks */
89    virtual void mouseMoved (MouseEvent *e);
90   
91    // This is when the mouse is clicked, held and dragged.
92    virtual void mouseDragged (MouseEvent *e);
93/*
94    void keyPressed(KeyEvent* e)
95    {
96        if(e->getKey() == KC_ESCAPE)
97        {
98            mShutdownRequested = true;
99            e->consume();
100            return;
101        }
102
103        CEGUI::System::getSingleton().injectKeyDown(e->getKey());
104                CEGUI::System::getSingleton().injectChar(e->getKeyChar());
105        e->consume();
106    }
107
108        void keyReleased(KeyEvent* e)
109        {
110                CEGUI::System::getSingleton().injectKeyUp(e->getKey());
111                e->consume();
112        }
113        void keyClicked(KeyEvent* e)
114        {
115                // Do nothing
116                e->consume();
117        }
118
119    bool frameEnded(const FrameEvent& evt)
120    {
121        if (mShutdownRequested)
122            return false;
123        else
124            return ExampleFrameListener::frameEnded(evt);
125    }
126*/
127         void changeAlgorithm()
128    {
129        mAlgorithmType = ++mAlgorithmType % OcclusionCullingSceneManager::NUM_RENDERMODES;
130        mAlgorithmInfo->setCaption("Algorithm: " + mAlgorithmTypeCaptions[mAlgorithmType]);
131    }
132
133
134protected:
135    bool mLMouseDown, mRMouseDown;     // True if the mouse buttons are down
136    SceneManager *mSceneMgr;           // A pointer to the scene manager
137    SceneNode *mCurrentObject;         // The newly created object
138    CEGUI::Renderer *mGUIRenderer;     // cegui renderer
139        SceneNode* mShipNode;
140//      bool mShutdownRequested;
141        int mAlgorithmType;
142        OverlayElement *mAlgorithmInfo;
143};
144
145
146class TestCullingApplication : public ExampleApplication
147{
148public:
149    /*TestCullingApplication()
150    {
151
152    }*/
153
154protected:
155        void createScene(void);
156
157        void createFrameListener(void)
158    {
159                mFrameListener= new MouseQueryListener(mWindow, mCamera, mSceneMgr, mGUIRenderer, mShipNode);
160                mFrameListener->showDebugOverlay(true);
161                mRoot->addFrameListener(mFrameListener);
162    }
163
164        CEGUI::OgreCEGUIRenderer *mGUIRenderer;
165        CEGUI::System *mGUISystem;
166
167private:
168        Entity* mShip;
169        SceneNode* mShipNode;
170
171/*    String mQuakePk3;
172    String mQuakeLevel;
173
174    // Override resource sources (include Quake3 archives)
175    void setupResources(void)
176    {
177
178        // Load Quake3 locations from a file
179        ConfigFile cf;
180
181        cf.load("quake3settings.cfg");
182
183        mQuakePk3 = cf.getSetting("Pak0Location");
184        mQuakeLevel = cf.getSetting("Map");
185
186                ExampleApplication::setupResources();
187        ResourceManager::addCommonArchiveEx(mQuakePk3, "Zip");
188
189    }*/
190    // Override scene manager (use indoor instead of generic)
191    void chooseSceneManager(void)
192    {
193        mSceneMgr = mRoot->getSceneManager(ST_GENERIC);
194    }
195       
196};
197
Note: See TracBrowser for help on using the repository browser.