void Pipe::flushFrames( ObjectManager* om ) { LB_TS_THREAD( _pipeThread ); ClientPtr client = getClient(); for( FrameHashCIter i = _impl->frames.begin(); i !=_impl->frames.end(); ++i) { Frame* frame = i->second; frame->setFrameData( 0 ); // datas are flushed below client->unmapObject( frame ); delete frame; } _impl->frames.clear(); for( FrameDataHashCIter i = _impl->inputFrameDatas.begin(); i != _impl->inputFrameDatas.end(); ++i ) { FrameDataPtr data = i->second; data->deleteGLObjects( om ); } _impl->inputFrameDatas.clear(); for( FrameDataHashCIter i = _impl->outputFrameDatas.begin(); i != _impl->outputFrameDatas.end(); ++i ) { FrameDataPtr data = i->second; data->resetPlugins(); data->deleteGLObjects( om ); client->unmapObject( data.get( )); getNode()->releaseFrameData( data ); } _impl->outputFrameDatas.clear(); }
void Node::_flushObjects() { ClientPtr client = getClient(); { lunchbox::ScopedMutex<> mutex( _impl->barriers ); for( BarrierHash::const_iterator i = _impl->barriers->begin(); i != _impl->barriers->end(); ++i ) { delete i->second; } _impl->barriers->clear(); } lunchbox::ScopedMutex<> mutex( _impl->frameDatas ); for( FrameDataHashCIter i = _impl->frameDatas->begin(); i != _impl->frameDatas->end(); ++i ) { FrameDataPtr frameData = i->second; frameData->resetPlugins(); client->unmapObject( frameData.get( )); } _impl->frameDatas->clear(); }