From 6e182e7c177193b4cfc28ba632249d62abd267a5 Mon Sep 17 00:00:00 2001 From: Robert Osfield Date: Thu, 17 Mar 2011 13:54:54 +0000 Subject: [PATCH] Added set up of CulLVisitor::Identifier so that the double buffered SceneView/CullVisitor share the same Identifier. --- src/osgViewer/Renderer.cpp | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/src/osgViewer/Renderer.cpp b/src/osgViewer/Renderer.cpp index 86c8e9237..940d9a412 100644 --- a/src/osgViewer/Renderer.cpp +++ b/src/osgViewer/Renderer.cpp @@ -409,6 +409,24 @@ Renderer::Renderer(osg::Camera* camera): _sceneView[0]->setCamera(_camera.get(), false); _sceneView[1]->setCamera(_camera.get(), false); + { + // assign CullVisitor::Identifier so that the double buffering of SceneView doesn't interfer + // with code that requires a consistent knowledge and which effective cull traversal to taking place + osg::ref_ptr leftEyeIdentifier = _sceneView[0]->getCullVisitor()->getIdentifier(); + osg::ref_ptr rightEyeIdentifier = new osgUtil::CullVisitor::Identifier(); + + _sceneView[0]->setCullVisitorLeft(_sceneView[0]->getCullVisitor()->clone()); + _sceneView[0]->getCullVisitorLeft()->setIdentifier(leftEyeIdentifier.get()); + _sceneView[0]->setCullVisitorRight(_sceneView[0]->getCullVisitor()->clone()); + _sceneView[0]->getCullVisitorRight()->setIdentifier(rightEyeIdentifier.get()); + + _sceneView[1]->getCullVisitor()->setIdentifier(leftEyeIdentifier.get()); + _sceneView[1]->setCullVisitorLeft(_sceneView[1]->getCullVisitor()->clone()); + _sceneView[1]->getCullVisitorLeft()->setIdentifier(leftEyeIdentifier.get()); + _sceneView[1]->setCullVisitorRight(_sceneView[1]->getCullVisitor()->clone()); + _sceneView[1]->getCullVisitorRight()->setIdentifier(rightEyeIdentifier.get()); + } + // lock the mutex for the current cull SceneView to // prevent the draw traversal from reading from it before the cull traversal has been completed. _availableQueue.add(_sceneView[0].get());