00001 #ifndef __Renderer__ 00002 #define __Renderer__ 00003 00004 #include <osg/Camera> 00005 #include <osg/Group> 00006 #include "OsgCanvas.h" 00007 #include "Observer.h" 00008 #include "SceneManager.h" 00009 #include "ICameraManipulator.h" 00010 #include "StopWatch.h" 00011 #include "Terrain.h" 00012 #include "RenderPass.h" 00013 00039 class Renderer : public Observer { 00040 public: 00041 Renderer(OSGCanvas* canvas, wxGraphicsWindow* graphicsWindow); 00042 ~Renderer(); 00043 00044 void renderScene(); 00045 00046 void notify(Observable* observable); 00047 00048 osgViewer::Viewer* getViewer(); 00049 osg::Camera* getMasterCamera(); 00050 osg::Camera* getActiveCamera(); 00051 00052 double getFramesPerSecond(); 00053 00054 ICameraManipulator* getCameraManipulator(); 00055 void setCameraManipulator(ICameraManipulator* cameraManipulator); 00056 00057 void resizeView(); 00058 00059 bool getNightVision(); 00060 void setNightVision(bool status); 00061 00062 protected: 00063 struct UniformUpdateElapsedTime : public osg::Uniform::Callback { 00064 public: 00065 double* elapsedTime; 00066 void operator()(osg::Uniform* uniform, osg::NodeVisitor* nv) { 00067 static double time = 0.0; 00068 time += *elapsedTime; 00069 uniform->set((float)time); 00070 } 00071 }; 00072 00073 struct UniformUpdateViewport : public osg::Uniform::Callback { 00074 public: 00075 osg::Vec2f viewport; 00076 virtual void operator()(osg::Uniform* uniform, osg::NodeVisitor* nv) { 00077 uniform->set(viewport); 00078 } 00079 }; 00080 00081 UniformUpdateElapsedTime _uniformUpdateElapsedTime; 00082 UniformUpdateViewport _uniformUpdateViewport; 00083 00084 osg::ref_ptr<osg::Image> _noiseImage; 00085 osg::ref_ptr<osg::Texture2D> _noiseTexture; 00086 00087 00088 OSGCanvas* _canvas; 00089 wxGraphicsWindow* _graphicsWindow; 00090 00091 ForwardPass* _forwardPass; 00092 PostEffectPass* _postEffectPass; 00093 00094 ICameraManipulator* _cameraManipulator; 00095 osg::ref_ptr<osg::Camera> _masterCamera; 00096 osgViewer::Viewer* _viewer; 00097 osg::ref_ptr<osg::Group> _nightVisionScene; 00098 00099 double _framesPerSecond; 00100 double _elapsedTime; 00101 00102 SceneManager& _sceneManager; 00103 Terrain& _terrain; 00104 00105 bool _nightVision; 00106 }; 00107 00108 00109 #endif