From 663801c0c8fc897e9afd738ac53efcc6619a3c84 Mon Sep 17 00:00:00 2001 From: Robert Osfield Date: Wed, 31 Mar 2004 09:20:46 +0000 Subject: [PATCH] Clean up freeing of no longer required tiles --- include/osgTerrain/DataSet | 6 +++-- src/osgTerrain/DataSet.cpp | 53 +++++++++++++++++--------------------- 2 files changed, 28 insertions(+), 31 deletions(-) diff --git a/include/osgTerrain/DataSet b/include/osgTerrain/DataSet index adca5c0c9..88a511f99 100644 --- a/include/osgTerrain/DataSet +++ b/include/osgTerrain/DataSet @@ -697,7 +697,7 @@ class DataSet : public osg::Referenced osg::Geometry* createDrawablePolygonal(); - void empty(); + void unrefData(); DataSet* _dataSet; @@ -768,6 +768,9 @@ class DataSet : public osg::Referenced osg::Node* createPagedLODScene(); osg::Node* createSubTileScene(); + void unrefSubTileData(); + void unrefLocalData(); + void setSubTilesGenerated(bool generated) { _subTileGenerated=generated; } bool getSubTilesGenerated() const { return _subTileGenerated; } @@ -912,7 +915,6 @@ class DataSet : public osg::Referenced void _readRow(Row& row); void _equalizeRow(Row& row); void _writeRow(Row& row); - void _emptyRow(Row& row); void init(); diff --git a/src/osgTerrain/DataSet.cpp b/src/osgTerrain/DataSet.cpp index f3e588d98..34a6f55eb 100644 --- a/src/osgTerrain/DataSet.cpp +++ b/src/osgTerrain/DataSet.cpp @@ -2055,7 +2055,7 @@ void DataSet::DestinationTile::readFrom(CompositeSource* sourceGraph) } -void DataSet::DestinationTile::empty() +void DataSet::DestinationTile::unrefData() { _imagery = 0; _terrain = 0; @@ -2419,6 +2419,28 @@ osg::Node* DataSet::CompositeDestination::createSubTileScene() } } +void DataSet::CompositeDestination::unrefSubTileData() +{ + for(CompositeDestination::ChildList::iterator citr=_children.begin(); + citr!=_children.end(); + ++citr) + { + (*citr)->unrefLocalData(); + } +} + +void DataSet::CompositeDestination::unrefLocalData() +{ + for(CompositeDestination::TileList::iterator titr=_tiles.begin(); + titr!=_tiles.end(); + ++titr) + { + DestinationTile* tile = titr->get(); + std::cout<<" unref tile level="<_level<<" X="<_tileX<<" Y="<_tileY<unrefData(); + } +} + /////////////////////////////////////////////////////////////////////////////// DataSet::DataSet() @@ -2983,6 +3005,7 @@ void DataSet::_writeRow(Row& row) std::cout<<" writeSubTile filename="<setSubTilesGenerated(true); + parent->unrefSubTileData(); } else { @@ -3010,32 +3033,6 @@ void DataSet::_writeRow(Row& row) } } -void DataSet::_emptyRow(Row& row) -{ - std::cout<<"_emptyRow"<second; - CompositeDestination* parent = cd->_parent; - if (!parent || parent->getSubTilesGenerated()) - { - for(CompositeDestination::TileList::iterator titr=cd->_tiles.begin(); - titr!=cd->_tiles.end(); - ++titr) - { - DestinationTile* tile = titr->get(); - std::cout<<" empty tile level="<_level<<" X="<_tileX<<" Y="<_tileY<empty(); - } - } - } - -} - - void DataSet::createDestination(unsigned int numLevels) { @@ -3086,14 +3083,12 @@ void DataSet::writeDestination() _equalizeRow(prev_itr->second); _writeRow(prev_itr->second); - _emptyRow(prev_itr->second); prev_itr = curr_itr; } _equalizeRow(prev_itr->second); _writeRow(prev_itr->second); - _emptyRow(prev_itr->second); } } }