1、建立同步锁
osgViewer/ViewBase.cpp
void ViewerBase::startThreading()
{
_endDynamicDrawBlock = new osg::EndOfDynamicDrawBlock(numViewerDoubleBufferedRenderingOperation);
_startRenderingBarrier = new osg::BarrierOperation(numThreadsOnStartBarrier, osg::BarrierOperation::NO_OPERATION);
_endRenderingDispatchBarrier = new osg::BarrierOperation(numThreadsOnEndBarrier, _endBarrierOperation);
for(citr = contexts.begin();
citr != contexts.end();
++citr)
{
osg::GraphicsContext* gc = (*citr);
gc->getState()->setDynamicObjectRenderingCompletedCallback(_endDynamicDrawBlock.get());
gc->getGraphicsThread()->add(_startRenderingBarrier.get());
gc->getGraphicsThread()->add(_endRenderingDispatchBarrier.get());
}
}
osg/OperationThread.cpp
void OperationThread::add(Opera