void Node::_flushObjects() { ClientPtr client = getClient(); { lunchbox::ScopedMutex<> mutex( _barriers ); for( BarrierHash::const_iterator i =_barriers->begin(); i != _barriers->end(); ++ i ) { co::Barrier* barrier = i->second; client->unmapObject( barrier ); delete barrier; } _barriers->clear(); } lunchbox::ScopedMutex<> mutex( _frameDatas ); LBASSERT( _frameDatas->empty( )); for( FrameDataHashCIter i = _frameDatas->begin(); i != _frameDatas->end(); ++i ) { FrameDataPtr frameData = i->second; client->unmapObject( frameData.get( )); } _frameDatas->clear(); }
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(); }
Frame* Pipe::getFrame( const co::ObjectVersion& frameVersion, const Eye eye, const bool isOutput ) { LB_TS_THREAD( _pipeThread ); Frame* frame = _impl->frames[ frameVersion.identifier ]; if( !frame ) { ClientPtr client = getClient(); frame = new Frame(); LBCHECK( client->mapObject( frame, frameVersion )); _impl->frames[ frameVersion.identifier ] = frame; } else frame->sync( frameVersion.version ); const co::ObjectVersion& dataVersion = frame->getDataVersion( eye ); LBLOG( LOG_ASSEMBLY ) << "Use " << dataVersion << std::endl; FrameDataPtr frameData = getNode()->getFrameData( dataVersion ); LBASSERT( frameData ); if( isOutput ) { if( !frameData->isAttached() ) { ClientPtr client = getClient(); LBCHECK( client->mapObject( frameData.get(), dataVersion )); } else if( frameData->getVersion() < dataVersion.version ) frameData->sync( dataVersion.version ); _impl->outputFrameDatas[ dataVersion.identifier ] = frameData; } else _impl->inputFrameDatas[ dataVersion.identifier ] = frameData; frame->setFrameData( frameData ); return frame; }
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(); }