19 #include <osg/OperationThread>
20 #include <osgUtil/RenderBin>
21 #include <osgViewer/Viewer>
47 class DtEffectManager;
49 class DtOsgWindowManager;
50 class DtOsgProfilerOverlay;
51 class DtOsgPerformanceStatsOverlay;
52 class DtFastMatrixTransform;
55 class DtOsgGlobalShaderComponent;
56 class DtShadowSettingsObject;
57 class DtTaxiwaySignManager;
58 class DtRunwayMarkingManager;
59 class DtLightIndicatorManager;
80 const static int SKY_RENDERBIN = -10;
81 const static int DEFAULT_RENDERBIN = 0;
82 const static int DEPTH_ONLY_RENDERBIN = 6;
83 const static int OCEAN_RENDERBIN = 7;
84 const static int LIGHTPOINT_RENDERBIN = 8;
85 const static int CLOUD_RENDERBIN = 9;
86 const static int DEFAULT_TRANSPARENT_RENDERBIN = 10;
87 const static int COCKPIT_RENDERBIN = 25;
108 virtual void update();
111 virtual void render();
114 virtual bool viewExists()
const;
117 virtual void resetSceneGraph();
121 virtual void removeChannelRoot(
DtChannel* channel);
124 virtual void addNodeToRoot(osg::Node* node,
const DtSceneRoot& sr,
bool createOnAccess =
true);
127 virtual void removeNodeFromRoot(osg::Node* node,
const DtSceneRoot& sr);
130 virtual void traverseRoot(osg::NodeVisitor& nv,
const DtSceneRoot& sr);
133 virtual void setSceneRootNodeMask(
const DtSceneRoot& sr,
134 osg::Node::NodeMask nodemask);
137 virtual osg::Node::NodeMask sceneRootNodeMask(
const DtSceneRoot& sr);
140 virtual osg::BoundingSphere sceneRootBound(
const DtSceneRoot& sr);
143 virtual osg::BoundingSphere sceneRootListBound(
const DtSceneRootList& srList);
146 virtual void addChannelToModelSetRoot(
int modelSetId,
150 virtual void removeChannelFromModelSetRoot(
int modelSetId,
154 virtual void addChannelToVisualizerRoot(
int modelSetId,
158 virtual void removeChannelFromVisualizerRoot(
int modelSetId,
162 virtual void setSceneDataToRenderRoot(osgViewer::View& view);
165 virtual void addSceneToCamera(osg::Camera* camera);
171 virtual void addSceneRootToNode(
const DtSceneRoot& sr,
172 osg::Group* node,
bool createOnAccess =
true);
178 virtual osg::Group* findSceneRootChildByName(
const DtSceneRoot& parent,
179 const std::string& rootName);
182 virtual bool matchesSceneRoot(
const DtSceneRoot& sr, osg::Group* group);
185 virtual void releaseResources()
191 virtual void releaseResources(osg::State* state);
195 void setRootNode(osg::Group*,
bool copyChildrenFromOldRoot);
202 void registerPagedLODs(osg::Node* node);
206 void clearPagedLODs();
209 virtual void setWireframeRendering(
bool enabled);
212 virtual void setDdsFlip(
bool flip);
215 virtual bool wireframeRendering()
const;
218 virtual void setShadowState(
bool enabled);
221 virtual bool shadowsEnabled()
const;
224 void setTerrainScalingEnabled(
bool enabled);
227 void setTerrainScaleFactor(
double scaleFactor);
231 virtual bool makeContextCurrent();
248 void debugDrawBox(
const osg::Vec3& center,
const osg::Vec3& extents);
251 void debugDrawBox(
const osg::Vec3& center,
const osg::Vec3& extents,
const osg::Quat& orientation);
254 void setChannelShadowState(
DtOsgChannel* osgChannel,
bool enable);
260 bool getChannelCloudShadowMap(
DtOsgChannel* osgChannel,
unsigned int* textureIndex, osg::Matrix* textureViewProjMatrix,
261 unsigned int* textureIndex2, osg::Matrix* textureViewProjMatrix2);
264 bool getCameraCloudShadowMap(osg::Camera* camera,
unsigned int* textureIndex, osg::Matrix* textureViewProjMatrix,
265 unsigned int* textureIndex2, osg::Matrix* textureViewProjMatrix2);
268 osg::StateSet* sgRenderRootStateSet();
277 void clearStateGraphForAllChannels(
void);
283 virtual int alphaToCoverageRenderBin();
297 static DtSceneRoot visualizerTypeRoot(
int modelSet,
int visualizerType)
310 osg::Group* sgRenderRoot();
314 osg::Group* sgEnvironmentRoot();
317 osg::Group* sgPropsRoot();
320 osg::Group* sgTerrainRoot();
323 osg::Group* sgScaledTerrainRoot();
326 osg::Group* sgScaledPropsRoot();
329 osg::Group* sgStatic2dDebugRoot();
332 osg::Group* sgStatic3dDebugRoot();
335 osg::Group* sgOceanRoot();
340 virtual void moveRootToShadowRoot(
const DtSceneRoot& targetRoot,
341 osg::Group* shadowRoot, osg::Group* modelSetRoot);
347 virtual osgViewer::ViewerBase& viewer();
359 osg::Group* sgModelSetRoot(
int modelSet);
366 osg::Group* sgVisualizerRoot(
int modelSet,
int visualizerType,
367 bool createOnAccess =
true);
374 osg::Group* sgChannelRoot(
int modelSet,
375 DtChannel* channel,
bool createOnAccess =
true);
378 void slot_onViewCreated();
382 void slot_onViewToBeDestroyed();
385 void slot_onWireframeModeChanged(
bool mode);
388 void slot_onDdsFlipChanged(
bool flip);
391 void slot_onShadowStateChanged(
bool shadowMode);
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();
415 void clearFrameBufferIfChannelChanged();
419 virtual void removeShadows();
422 virtual void createShadowRoots();
427 virtual bool exportTerrainAndProps(
const std::string&);
429 virtual osg::Group* createModelSetRoot(
int modelSet);
430 virtual osg::Group* createVisualizerRoot(
int modelSet,
434 virtual osg::Group* createChannelRoot(
int modelSet,
DtChannel*);
436 virtual osgShadow::ShadowedScene*
437 createModelSetSpecificShadowRootAndScene(
int modelSet);
438 virtual osg::Group* modelSetSpecificShadowRoot(
int modelSet);
439 virtual osgShadow::ShadowedScene*
440 modelSetSpecificShadowScene(
int modelSet);
442 virtual void updateTerrainScaling();
444 virtual void initAerodromeManagers();
445 virtual void updateAerodrome();
448 void swapChildren(osg::Node* currentChild, osg::Node* newChild);
452 virtual void updateRenderMap(
const CullSet& cullSet);
456 void postInitialize();
459 void setupAtcVirtualProgram();
514 typedef boost::unordered_map<int, osg::ref_ptr<osg::Group> >
RootMap;
515 typedef boost::unordered_map<int, osg::ref_ptr<osgShadow::ShadowedScene> >
ShadowedSceneMap;
522 typedef boost::unordered_map < ModelSet, osg::ref_ptr<osg::Group> >
525 typedef boost::unordered_map < VisualizerType, osg::ref_ptr<osg::Group> >
531 typedef boost::unordered_map < ModelSet, VisualizerTypeRootMap >
551 typedef boost::unordered_map < DtChannel*, ModelSetRootMap >