From 312be5410acda7442086d7995c6ec6ed1a6c4004 Mon Sep 17 00:00:00 2001 From: James Turner Date: Sat, 22 Jun 2013 14:34:03 +0100 Subject: [PATCH] Object names for more scene-graph nodes. --- src/Scenery/scenery.cxx | 2 +- src/Viewer/CameraGroup.cxx | 2 ++ src/Viewer/renderer.cxx | 24 ++++++++++++++++++++---- src/Viewer/splash.cxx | 1 + 4 files changed, 24 insertions(+), 5 deletions(-) diff --git a/src/Scenery/scenery.cxx b/src/Scenery/scenery.cxx index 55dcb6de8..379538ba8 100644 --- a/src/Scenery/scenery.cxx +++ b/src/Scenery/scenery.cxx @@ -234,7 +234,7 @@ FGScenery::~FGScenery() { void FGScenery::init() { // Scene graph root scene_graph = new osg::Group; - scene_graph->setName( "Scene" ); + scene_graph->setName( "FGScenery" ); // Terrain branch terrain_branch = new osg::Group; diff --git a/src/Viewer/CameraGroup.cxx b/src/Viewer/CameraGroup.cxx index 255e675f4..13575fac8 100644 --- a/src/Viewer/CameraGroup.cxx +++ b/src/Viewer/CameraGroup.cxx @@ -756,6 +756,7 @@ CameraInfo* CameraGroup::buildCamera(SGPropertyNode* cameraNode) return 0; } Camera* camera = new Camera; + camera->setName("windowCamera"); camera->setAllowEventFocus(false); camera->setGraphicsContext(window->gc.get()); camera->setViewport(new Viewport); @@ -1020,6 +1021,7 @@ CameraInfo* CameraGroup::buildGUICamera(SGPropertyNode* cameraNode, const int cameraFlags = GUI | DO_INTERSECTION_TEST; CameraInfo* result = new CameraInfo(cameraFlags); + result->name = "GUI camera"; // The camera group will always update the camera camera->setReferenceFrame(Transform::ABSOLUTE_RF); diff --git a/src/Viewer/renderer.cxx b/src/Viewer/renderer.cxx index 6dcfd3159..9a0817c7d 100644 --- a/src/Viewer/renderer.cxx +++ b/src/Viewer/renderer.cxx @@ -409,6 +409,9 @@ FGRenderer::FGRenderer() : #ifdef FG_JPEG_SERVER jpgRenderFrame = updateRenderer; #endif + + // it's not the real root, whatever that means + mRoot->setName("fakeRoot"); _numCascades = 4; _cascadeFar[0] = 5.f; @@ -431,7 +434,10 @@ FGRenderer::~FGRenderer() void FGRenderer::splashinit( void ) { osgViewer::Viewer* viewer = getViewer(); + viewer->setName("osgViewer"); mRealRoot = dynamic_cast(viewer->getSceneData()); + mRealRoot->setName("realRoot"); + ref_ptr splashNode = fgCreateSplashNode(); if (_classicalRenderer) { mRealRoot->addChild(splashNode.get()); @@ -639,10 +645,12 @@ FGRenderer::buildClassicalPipeline(CameraGroup* cgroup, unsigned flags, osg::Cam CameraInfo* info = new CameraInfo(flags); // The camera group will always update the camera camera->setReferenceFrame(Transform::ABSOLUTE_RF); - + info->name = "classic"; + Camera* farCamera = 0; if ((flags & (CameraGroup::GUI | CameraGroup::ORTHO)) == 0) { farCamera = new Camera; + farCamera->setName("farCamera"); farCamera->setAllowEventFocus(camera->getAllowEventFocus()); farCamera->setGraphicsContext(camera->getGraphicsContext()); farCamera->setCullingMode(camera->getCullingMode()); @@ -1441,6 +1449,7 @@ FGRenderer::setupView( void ) stateSet->setAttribute(hint); osg::Group* sceneGroup = new osg::Group; + sceneGroup->setName("rendererScene"); sceneGroup->addChild(globals->get_scenery()->get_scene_graph()); sceneGroup->setNodeMask(~simgear::BACKGROUND_BIT); @@ -1460,6 +1469,7 @@ FGRenderer::setupView( void ) // affect geometry anywhere in the scene graph that has its light // number enabled in a state set. LightSource* lightSource = new LightSource; + lightSource->setName("FGLightSource"); lightSource->getLight()->setDataVariance(Object::DYNAMIC); // relative because of CameraView being just a clever transform node lightSource->setReferenceFrame(osg::LightSource::RELATIVE_RF); @@ -1468,6 +1478,7 @@ FGRenderer::setupView( void ) mRealRoot->addChild(lightSource); // we need a white diffuse light for the phase of the moon osg::LightSource* sunLight = new osg::LightSource; + sunLight->setName("sunLightSource"); sunLight->getLight()->setDataVariance(Object::DYNAMIC); sunLight->getLight()->setLightNum(1); sunLight->setUpdateCallback(new FGLightSourceUpdateCallback(true)); @@ -1477,6 +1488,7 @@ FGRenderer::setupView( void ) // Hang a StateSet above the sky subgraph in order to turn off // light 0 Group* skyGroup = new Group; + skyGroup->setName("rendererSkyParent"); StateSet* skySS = skyGroup->getOrCreateStateSet(); skySS->setMode(GL_LIGHT0, StateAttribute::OFF); skyGroup->addChild(_sky->getPreRoot()); @@ -1522,6 +1534,7 @@ FGRenderer::setupView( void ) } osg::Switch* sw = new osg::Switch; + sw->setName("scenerySwitch"); sw->setUpdateCallback(new FGScenerySwitchCallback); sw->addChild(mRoot.get()); mRealRoot->addChild(sw); @@ -1795,10 +1808,12 @@ FGRenderer::pick(std::vector& pickList, const osg::Vec2& windowPo ++hit) { const osg::NodePath& np = hit->nodePath; osg::NodePath::const_reverse_iterator npi; + for (npi = np.rbegin(); npi != np.rend(); ++npi) { SGSceneUserData* ud = SGSceneUserData::getSceneUserData(*npi); - if (!ud) + if (!ud || (ud->getNumPickCallbacks() == 0)) continue; + for (unsigned i = 0; i < ud->getNumPickCallbacks(); ++i) { SGPickCallback* pickCallback = ud->getPickCallback(i); if (!pickCallback) @@ -1812,9 +1827,10 @@ FGRenderer::pick(std::vector& pickList, const osg::Vec2& windowPo sceneryPick.callback = pickCallback; pickList.push_back(sceneryPick); - } - } + } // of installed pick callbacks iteration + } // of reverse node path walk } + return !pickList.empty(); } diff --git a/src/Viewer/splash.cxx b/src/Viewer/splash.cxx index 65dfce1b9..5615efc16 100644 --- a/src/Viewer/splash.cxx +++ b/src/Viewer/splash.cxx @@ -374,6 +374,7 @@ private: osg::Node* fgCreateSplashNode() { osg::Group* group = new osg::Group; + group->setName("splashGroup"); group->setUpdateCallback(new FGSplashGroupUpdateCallback); return group; } -- 2.39.5