diff --git a/src/osgUtil/RenderStage.cpp b/src/osgUtil/RenderStage.cpp index 4b954acb2..f1e3e4b69 100644 --- a/src/osgUtil/RenderStage.cpp +++ b/src/osgUtil/RenderStage.cpp @@ -853,6 +853,8 @@ void RenderStage::draw(osg::RenderInfo& renderInfo,RenderLeaf*& previous) // now as an experiment. callingContext->releaseContext(); + // osg::notify(osg::NOTICE)<<" enclosing state before - "<getState(); useContext = _graphicsContext.get(); useThread = useContext->getGraphicsThread(); @@ -869,9 +871,13 @@ void RenderStage::draw(osg::RenderInfo& renderInfo,RenderLeaf*& previous) { previous = 0; useContext->makeCurrent(); + + // osg::notify(osg::NOTICE)<<" nested state before - "<getStateSetStackSize()<getStateSetStackSize(); + if (_camera && _camera->getPreDrawCallback()) { // if we have a camera with a post draw callback invoke it. @@ -927,11 +933,16 @@ void RenderStage::draw(osg::RenderInfo& renderInfo,RenderLeaf*& previous) if (_graphicsContext.valid() && _graphicsContext != callingContext) { + useState->popStateSetStackToSize(originalStackSize); + if (!useThread) { + + // flush any command left in the useContex's FIFO // to ensure that textures are updated before main thread commenses. glFlush(); + useContext->releaseContext(); } @@ -943,6 +954,9 @@ void RenderStage::draw(osg::RenderInfo& renderInfo,RenderLeaf*& previous) previous = saved_previous; + // osg::notify(osg::NOTICE)<<" nested state after - "<getStateSetStackSize()<makeCurrent(); }