diff --git a/src/osg/Texture.cpp b/src/osg/Texture.cpp index 9942f5f78..c6b4759c1 100644 --- a/src/osg/Texture.cpp +++ b/src/osg/Texture.cpp @@ -393,12 +393,33 @@ void Texture::TextureObjectSet::flushDeletedTextureObjects(double currentTime, d { // OSG_NOTICE<<"Texture::TextureObjectSet::flushDeletedTextureObjects(..)"<getCurrTexturePoolSize()<=_parent->getMaxTexturePoolSize()) + { + // OSG_NOTICE<<"Plenty of space in TexturePool"< lock(_mutex); + handlePendingOrphandedTextureObjects(); + } +#endif + // if nothing to delete return - if (_orphanedTextureObjects.empty()) return; + if (_orphanedTextureObjects.empty()) + { + return; + } // if no time available don't try to flush objects. if (availableTime<=0.0) return; +#if 0 // if we don't have too many orphaned texture objects then don't bother deleting them, as we can potentially reuse them later. if (_parent->getNumberOrphanedTextureObjects()<=s_minimumNumberOfTextureObjectsToRetainInCache) return; @@ -406,6 +427,16 @@ void Texture::TextureObjectSet::flushDeletedTextureObjects(double currentTime, d unsigned int maxNumObjectsToDelete = _parent->getNumberOrphanedTextureObjects()-s_minimumNumberOfTextureObjectsToRetainInCache; if (maxNumObjectsToDelete>4) maxNumObjectsToDelete = 4; +#else + + unsigned int numDeleted = 0; + unsigned int sizeRequired = _parent->getCurrTexturePoolSize() - _parent->getMaxTexturePoolSize(); + unsigned int maxNumObjectsToDelete = static_cast(ceil(double(sizeRequired) / double(_profile._size))); + // OSG_NOTICE<<"_parent->getCurrTexturePoolSize()="<<_parent->getCurrTexturePoolSize() <<" _parent->getMaxTexturePoolSize()="<< _parent->getMaxTexturePoolSize()< lock(_mutex); + handlePendingOrphandedTextureObjects(); + } +#endif + if (!_orphanedTextureObjects.empty()) { unsigned int sizeAvailable = _orphanedTextureObjects.size() * _profile._size; @@ -842,6 +882,14 @@ void Texture::TextureObjectManager::flushDeletedTextureObjects(double currentTim { ElapsedTime elapsedTime(&(getDeleteTime())); + static double max_ratio = 0.0f; + double ratio = double(getCurrTexturePoolSize())/double(getMaxTexturePoolSize()); + if (ratio>max_ratio) + { + max_ratio = ratio; + } + // OSG_NOTICE<<"TexturePool Size ratio "< 0.0); ++itr)