From Cedric Pinson and Robert Osfield, addition of NodeCallbacks to osg::CopyOp and osg::Node copy constructor.
This commit is contained in:
@@ -65,3 +65,23 @@ StateAttribute* CopyOp::operator() (const StateAttribute* attr) const
|
||||
}
|
||||
|
||||
|
||||
NodeCallback* CopyOp::operator() (const NodeCallback* nc) const
|
||||
{
|
||||
if (nc && _flags&DEEP_COPY_NODECALLBACKS)
|
||||
{
|
||||
// deep copy the full chain of callback
|
||||
osg::NodeCallback* first = dynamic_cast<osg::NodeCallback*>(nc->clone(*this));
|
||||
first->setNestedCallback(0);
|
||||
nc = nc->getNestedCallback();
|
||||
while (nc)
|
||||
{
|
||||
osg::NodeCallback* ucb = dynamic_cast<osg::NodeCallback*>(nc->clone(*this));
|
||||
ucb->setNestedCallback(0);
|
||||
first->addNestedCallback(ucb);
|
||||
nc = nc->getNestedCallback();
|
||||
}
|
||||
return first;
|
||||
}
|
||||
else
|
||||
return const_cast<NodeCallback*>(nc);
|
||||
}
|
||||
|
||||
@@ -74,10 +74,10 @@ Node::Node(const Node& node,const CopyOp& copyop):
|
||||
_boundingSphere(node._boundingSphere),
|
||||
_boundingSphereComputed(node._boundingSphereComputed),
|
||||
_parents(), // leave empty as parentList is managed by Group.
|
||||
_updateCallback(node._updateCallback),
|
||||
_updateCallback(copyop(node._updateCallback.get())),
|
||||
_numChildrenRequiringUpdateTraversal(0), // assume no children yet.
|
||||
_numChildrenRequiringEventTraversal(0), // assume no children yet.
|
||||
_cullCallback(node._cullCallback),
|
||||
_cullCallback(copyop(node._cullCallback.get())),
|
||||
_cullingActive(node._cullingActive),
|
||||
_numChildrenWithCullingDisabled(0), // assume no children yet.
|
||||
_numChildrenWithOccluderNodes(0),
|
||||
|
||||
Reference in New Issue
Block a user