16 #include <osg/ref_ptr>
17 #include <osgUtil/RenderBin>
18 #include <osgViewer/Viewer>
21 #include <boost/unordered_map.hpp>
22 #include <boost/signals.hpp>
30 namespace makOsgShadowFX
39 class DtEffectManager;
41 class DtOsgWindowManager;
42 class DtOsgPerformanceStatsOverlay;
43 class DtFastMatrixTransform;
81 : myDomain(ModelSetSpecific)
83 myParameter.modelSetId = modelSet;
86 : myDomain(VisualizerTypeSpecific)
88 myParameter.modelSetId = modelSet;
89 myParameter.visualizerType = visualizerType;
93 : myDomain(ChannelSpecific)
95 myParameter.modelSetId = modelSet;
96 myParameter.channel = channel;
101 if ( myDomain == ModelSetSpecific )
106 if ( myDomain == VisualizerTypeSpecific )
112 if ( myDomain == ChannelSpecific )
144 const static int SKY_RENDERBIN = -10;
145 const static int CLOUDS_RENDERBIN = 9;
146 const static int COCKPIT_RENDERBIN = 25;
158 virtual void update();
161 virtual void render();
164 virtual bool viewExists()
const;
167 virtual void resetSceneGraph();
171 virtual void removeChannelRoot(
DtChannel* channel);
174 virtual void addNodeToRoot(osg::Node* node,
SceneRoot sr,
bool createOnAccess=
true );
177 virtual void removeNodeFromRoot(osg::Node* node,
SceneRoot sr);
180 virtual void traverseRoot(osg::NodeVisitor& nv,
SceneRoot sr);
183 virtual void setSceneRootNodeMask(
SceneRoot sr,
184 osg::Node::NodeMask nodemask);
187 virtual osg::Node::NodeMask sceneRootNodeMask(
SceneRoot sr);
190 virtual osg::BoundingSphere sceneRootBound(
SceneRoot sr);
193 virtual osg::BoundingSphere sceneRootListBound(
const RootList& srList);
196 virtual void addChannelToModelSetRoot(
int modelSetId,
200 virtual void removeChannelFromModelSetRoot(
int modelSetId,
204 virtual void addChannelToVisualizerRoot(
int modelSetId,
205 int visualizerType,
DtChannel* channel );
208 virtual void removeChannelFromVisualizerRoot(
int modelSetId,
209 int visualizerType,
DtChannel* channel );
212 virtual void setSceneDataToRenderRoot( osgViewer::View& view );
215 virtual void addSceneToCamera(osg::Camera* camera);
221 virtual osg::Group* findSceneRootChildByName(
SceneRoot parent,
222 const std::string& rootName );
225 virtual void releaseResources()
231 virtual void releaseResources(osg::State* state);
235 void setRootNode(osg::Group*,
bool copyChildrenFromOldRoot);
242 void registerPagedLODs(osg::Node* node);
246 void clearPagedLODs();
249 virtual void setPerformanceStatsOverlayEnabled(
bool show);
252 virtual bool performanceStatsOverlayEnabled()
const;
255 virtual void setWireframeRendering(
bool enabled);
258 virtual void setDdsFlip(
bool flip);
261 virtual bool wireframeRendering()
const;
264 virtual void setShadowState(
bool enabled,
int quality,
bool entity,
265 bool prop,
bool terrain);
269 virtual bool shadowsEnabled()
const;
270 virtual int shadowQuality()
const;
271 virtual bool entityShadowsEnabled()
const;
272 virtual bool propShadowsEnabled()
const;
273 virtual bool terrainShadowsEnabled()
const;
277 void setTerrainScalingEnabled(
bool enabled );
280 void setTerrainScaleFactor(
double scaleFactor );
284 virtual bool makeContextCurrent();
306 static SceneRoot visualizerTypeRoot(
int modelSet,
int visualizerType)
307 {
return SceneRoot(modelSet, visualizerType); }
315 virtual void moveRootToShadowRoot( SceneRoot targetRoot, osg::Group* shadowRoot, osg::Group* modelSetRoot );
321 virtual osgViewer::ViewerBase& viewer();
324 virtual void onActiveStatsOverlayChanged(
DtStatsSet* activeStats);
332 osg::Group* sgRenderRoot();
336 osg::Group* sgEnvironmentRoot();
339 osg::Group* sgPropsRoot();
342 osg::Group* sgTerrainRoot();
345 osg::Group* sgScaledTerrainRoot();
348 osg::Group* sgScaledPropsRoot();
355 osg::Group* sgModelSetRoot(
int modelSet );
362 osg::Group* sgVisualizerRoot(
int modelSet,
int visualizerType,
363 bool createOnAccess=
true );
370 osg::Group* sgChannelRoot(
int modelSet,
371 DtChannel* channel,
bool createOnAccess=
true );
374 void slot_onViewCreated();
378 void slot_onViewToBeDestroyed();
381 void slot_onWireframeModeChanged(
bool mode);
384 void slot_onDdsFlipChanged(
bool flip);
387 virtual void slot_onPerformanceOverlayOnChanged(
bool mode);
390 void slot_onShadowStateChanged(
bool shadowMode,
int shadowQual,
391 bool entityMode,
bool propMode,
bool terrainMode);
394 void slot_onTerrainScalingEnabledChanged(
bool enabled );
397 void slot_onTerrainScaleFactorChanged(
double scaleFactor );
400 void slot_onCoordinateSystemChanged(
const std::string& coordinateSystemType);
405 void updateSceneGraph();
409 void clearEmptyWindows();
413 virtual void removeShadows();
416 virtual void createShadowRoots();
421 virtual bool exportTerrainAndProps(
const std::string&);
423 virtual osg::Group* createModelSetRoot(
int modelSet );
424 virtual osg::Group* createVisualizerRoot(
int modelSet,
428 virtual osg::Group* createChannelRoot(
int modelSet,
DtChannel* );
431 createModelSetSpecificShadowRootAndEffect(
int modelSet );
432 virtual osg::Group* modelSetSpecificShadowRoot(
int modelSet );
434 modelSetSpecificShadowEffect(
int modelSet );
436 virtual void updateTerrainScaling();
439 void swapChildren( osg::Node* currentChild, osg::Node* newChild );
478 typedef boost::unordered_map<int, osg::ref_ptr<osg::Group> >
RootMap;
479 typedef boost::unordered_map<int,
487 typedef boost::unordered_map<ModelSet, osg::ref_ptr<osg::Group> >
490 typedef boost::unordered_map<VisualizerType, osg::ref_ptr<osg::Group> >
496 typedef boost::unordered_map<ModelSet, VisualizerTypeRootMap>
516 typedef boost::unordered_map<DtChannel*, ModelSetRootMap >