//----------------------------------------------------------------------------------- void NULLVaoManager::_update(void) { VaoManager::_update(); unsigned long currentTimeMs = mTimer->getMilliseconds(); if( currentTimeMs >= mNextStagingBufferTimestampCheckpoint ) { mNextStagingBufferTimestampCheckpoint = (unsigned long)(~0); for( size_t i=0; i<2; ++i ) { StagingBufferVec::iterator itor = mZeroRefStagingBuffers[i].begin(); StagingBufferVec::iterator end = mZeroRefStagingBuffers[i].end(); while( itor != end ) { StagingBuffer *stagingBuffer = *itor; mNextStagingBufferTimestampCheckpoint = std::min( mNextStagingBufferTimestampCheckpoint, stagingBuffer->getLastUsedTimestamp() + stagingBuffer->getLifetimeThreshold() ); /*if( stagingBuffer->getLastUsedTimestamp() + stagingBuffer->getUnfencedTimeThreshold() < currentTimeMs ) { static_cast<NULLStagingBuffer*>( stagingBuffer )->cleanUnfencedHazards(); }*/ if( stagingBuffer->getLastUsedTimestamp() + stagingBuffer->getLifetimeThreshold() < currentTimeMs ) { //Time to delete this buffer. delete *itor; itor = efficientVectorRemove( mZeroRefStagingBuffers[i], itor ); end = mZeroRefStagingBuffers[i].end(); } else { ++itor; } } } } if( !mDelayedDestroyBuffers.empty() && mDelayedDestroyBuffers.front().frameNumDynamic == mDynamicBufferCurrentFrame ) { waitForTailFrameToFinish(); destroyDelayedBuffers( mDynamicBufferCurrentFrame ); } mDynamicBufferCurrentFrame = (mDynamicBufferCurrentFrame + 1) % mDynamicBufferMultiplier; }