From Tery Welsh, added support for inheriting all CameraNode CullSettings and then restoring the original values.

This commit is contained in:
Robert Osfield
2006-11-07 13:00:14 +00:00
parent d061c087fa
commit 6a81dc157d

View File

@@ -1070,13 +1070,12 @@ void CullVisitor::apply(osg::CameraNode& camera)
// push the node's state.
StateSet* node_state = camera.getStateSet();
if (node_state) pushStateSet(node_state);
// set the compute near far mode.
ComputeNearFarMode saved_compute_near_far_mode = getComputeNearFarMode();
if (camera.getInheritanceMask() & COMPUTE_NEAR_FAR_MODE)
{
setComputeNearFarMode( camera.getComputeNearFarMode());
}
// Save current cull settings
CullSettings saved_cull_settings(*this);
// activate all active cull settings from this CameraNode
inheritCullSettings(camera);
RefMatrix& originalModelView = getModelViewMatrix();
@@ -1184,24 +1183,11 @@ void CullVisitor::apply(osg::CameraNode& camera)
// set the current renderbin to be the newly created stage.
setCurrentRenderBin(rtts.get());
// set the cull traversal mask of camera node
osg::Node::NodeMask saved_mask = getCullMask();
if (camera.getInheritanceMask() & CULL_MASK)
{
setTraversalMask(camera.getCullMask());
}
// traverse the subgraph
{
handle_cull_callbacks_and_traverse(camera);
}
// restore the cull traversal mask of camera node
if (camera.getInheritanceMask() & CULL_MASK)
{
setTraversalMask(saved_mask);
}
// restore the previous renderbin.
setCurrentRenderBin(previousRenderBin);
@@ -1233,8 +1219,8 @@ void CullVisitor::apply(osg::CameraNode& camera)
// restore the previous model view matrix.
popProjectionMatrix();
// restore the previous compute near far mode
setComputeNearFarMode(saved_compute_near_far_mode);
// restore the previous cull settings
setCullSettings(saved_cull_settings);
// pop the node's state off the render graph stack.
if (node_state) popStateSet();