diff --git a/include/osgViewer/ViewerBase b/include/osgViewer/ViewerBase index ac7ab2a75..4f631380e 100644 --- a/include/osgViewer/ViewerBase +++ b/include/osgViewer/ViewerBase @@ -111,7 +111,7 @@ class OSGVIEWER_EXPORT ViewerBase : public virtual osg::Object * or NO_OPERATION. NO_OPERATION is the default. Per BarrierOperation::operator()(), * a glFlush() command, glFinish() command, or no additional OpenGL command will be * issued before entering the end barrier. */ - void setEndBarrierOperation(const osg::BarrierOperation::PreBlockOp& op) { _endBarrierOperation = op; } + void setEndBarrierOperation(osg::BarrierOperation::PreBlockOp op); /** Get the end barrier operation. */ osg::BarrierOperation::PreBlockOp getEndBarrierOperation() const { return _endBarrierOperation; } diff --git a/src/osgViewer/ViewerBase.cpp b/src/osgViewer/ViewerBase.cpp index 1a96ebfab..b917afb00 100644 --- a/src/osgViewer/ViewerBase.cpp +++ b/src/osgViewer/ViewerBase.cpp @@ -179,6 +179,16 @@ void ViewerBase::setEndBarrierPosition(BarrierPosition bp) if (_threadingModel!=SingleThreaded) startThreading(); } +void ViewerBase::setEndBarrierOperation(osg::BarrierOperation::PreBlockOp op) +{ + if (_endBarrierOperation == op) return; + + if (_threadsRunning) stopThreading(); + + _endBarrierOperation = op; + + if (_threadingModel!=SingleThreaded) startThreading(); +} void ViewerBase::stopThreading() {