Added traversal of salve camera subgraphs when the slave camera doesn't share it's scene graph wiht the View's master scene graph.

This commit is contained in:
Robert Osfield
2010-11-09 17:17:13 +00:00
parent ae27b4caaf
commit 5868022ca1
2 changed files with 71 additions and 9 deletions

View File

@@ -953,7 +953,18 @@ void CompositeViewer::eventTraversal()
view->getSceneData()->accept(*_eventVisitor);
// call any camera update callbacks, but only traverse that callback, don't traverse its subgraph
// Do EventTraversal for slaves with their own subgraph
for(unsigned int i=0; i<view->getNumSlaves(); ++i)
{
osg::View::Slave& slave = view->getSlave(i);
osg::Camera* camera = slave._camera.get();
if(camera && !slave._useMastersSceneData)
{
camera->accept(*_eventVisitor);
}
}
// call any camera event callbacks, but only traverse that callback, don't traverse its subgraph
// leave that to the scene update traversal.
osg::NodeVisitor::TraversalMode tm = _eventVisitor->getTraversalMode();
_eventVisitor->setTraversalMode(osg::NodeVisitor::TRAVERSE_NONE);
@@ -962,8 +973,12 @@ void CompositeViewer::eventTraversal()
for(unsigned int i=0; i<view->getNumSlaves(); ++i)
{
osg::View::Slave& slave = view->getSlave(i);
osg::Camera* camera = view->getSlave(i)._camera.get();
if (camera && camera->getEventCallback()) camera->accept(*_eventVisitor);
if (camera && slave._useMastersSceneData && camera->getEventCallback())
{
camera->accept(*_eventVisitor);
}
}
_eventVisitor->setTraversalMode(tm);
@@ -1075,6 +1090,17 @@ void CompositeViewer::updateTraversal()
View* view = vitr->get();
{
// Do UpdateTraversal for slaves with their own subgraph
for(unsigned int i=0; i<view->getNumSlaves(); ++i)
{
osg::View::Slave& slave = view->getSlave(i);
osg::Camera* camera = slave._camera.get();
if(camera && !slave._useMastersSceneData)
{
camera->accept(*_updateVisitor);
}
}
// call any camera update callbacks, but only traverse that callback, don't traverse its subgraph
// leave that to the scene update traversal.
osg::NodeVisitor::TraversalMode tm = _updateVisitor->getTraversalMode();
@@ -1084,8 +1110,12 @@ void CompositeViewer::updateTraversal()
for(unsigned int i=0; i<view->getNumSlaves(); ++i)
{
osg::Camera* camera = view->getSlave(i)._camera.get();
if (camera && camera->getUpdateCallback()) camera->accept(*_updateVisitor);
osg::View::Slave& slave = view->getSlave(i);
osg::Camera* camera = slave._camera.get();
if (camera && slave._useMastersSceneData && camera->getUpdateCallback())
{
camera->accept(*_updateVisitor);
}
}
_updateVisitor->setTraversalMode(tm);

View File

@@ -881,7 +881,19 @@ void Viewer::eventTraversal()
getSceneData()->accept(*_eventVisitor);
// call any camera update callbacks, but only traverse that callback, don't traverse its subgraph
// Do EventTraversal for slaves with their own subgraph
for(unsigned int i=0; i<getNumSlaves(); ++i)
{
osg::View::Slave& slave = getSlave(i);
osg::Camera* camera = slave._camera.get();
if(camera && !slave._useMastersSceneData)
{
camera->accept(*_eventVisitor);
}
}
// call any camera event callbacks, but only traverse that callback, don't traverse its subgraph
// leave that to the scene update traversal.
osg::NodeVisitor::TraversalMode tm = _eventVisitor->getTraversalMode();
_eventVisitor->setTraversalMode(osg::NodeVisitor::TRAVERSE_NONE);
@@ -890,8 +902,12 @@ void Viewer::eventTraversal()
for(unsigned int i=0; i<getNumSlaves(); ++i)
{
osg::Camera* camera = getSlave(i)._camera.get();
if (camera && camera->getEventCallback()) camera->accept(*_eventVisitor);
osg::View::Slave& slave = getSlave(i);
osg::Camera* camera = slave._camera.get();
if (camera && slave._useMastersSceneData && camera->getEventCallback())
{
camera->accept(*_eventVisitor);
}
}
_eventVisitor->setTraversalMode(tm);
@@ -970,6 +986,18 @@ void Viewer::updateTraversal()
_incrementalCompileOperation->mergeCompiledSubgraphs();
}
{
// Do UpdateTraversal for slaves with their own subgraph
for(unsigned int i=0; i<getNumSlaves(); ++i)
{
osg::View::Slave& slave = getSlave(i);
osg::Camera* camera = slave._camera.get();
if(camera && !slave._useMastersSceneData)
{
camera->accept(*_updateVisitor);
}
}
}
{
// call any camera update callbacks, but only traverse that callback, don't traverse its subgraph
@@ -981,8 +1009,12 @@ void Viewer::updateTraversal()
for(unsigned int i=0; i<getNumSlaves(); ++i)
{
osg::Camera* camera = getSlave(i)._camera.get();
if (camera && camera->getUpdateCallback()) camera->accept(*_updateVisitor);
osg::View::Slave& slave = getSlave(i);
osg::Camera* camera = slave._camera.get();
if (camera && slave._useMastersSceneData && camera->getUpdateCallback())
{
camera->accept(*_updateVisitor);
}
}
_updateVisitor->setTraversalMode(tm);