Change Terrain so that it subclassed from CoordinateSystemNode.

Implemented new update scheme of GeometryTechnique to avoid potential threading issues.

Added Terrain support to .ive.
This commit is contained in:
Robert Osfield
2010-04-03 16:21:34 +00:00
parent 656efbf03f
commit c6c26d5d44
18 changed files with 165 additions and 43 deletions

View File

@@ -140,7 +140,7 @@ void TerrainTile::traverse(osg::NodeVisitor& nv)
}
}
init();
init(getDirtyMask(), false);
_hasBeenTraversal = true;
}
@@ -164,7 +164,7 @@ void TerrainTile::traverse(osg::NodeVisitor& nv)
}
}
void TerrainTile::init()
void TerrainTile::init(int dirtyMask, bool assumeMultiThreaded)
{
if (!_terrainTechnique)
{
@@ -179,9 +179,9 @@ void TerrainTile::init()
}
}
if (_terrainTechnique.valid() && getDirty())
if (_terrainTechnique.valid())
{
_terrainTechnique->init();
_terrainTechnique->init(dirtyMask, assumeMultiThreaded);
}
}
@@ -218,6 +218,15 @@ void TerrainTile::setDirtyMask(int dirtyMask)
if (_dirtyMask!=NOT_DIRTY) dirtyDelta += 1;
#if 1
if (dirtyDelta>0)
{
// need to signal that we need an update
if (_terrain) _terrain->updateTerrainTileOnNextFrame(this);
}
#else
// setNumChildrenRequeingUpdateTraversal() isn't thread safe so should avoid using it.
if (dirtyDelta>0)
{
setNumChildrenRequiringUpdateTraversal(getNumChildrenRequiringUpdateTraversal()+1);
@@ -226,6 +235,7 @@ void TerrainTile::setDirtyMask(int dirtyMask)
{
setNumChildrenRequiringUpdateTraversal(getNumChildrenRequiringUpdateTraversal()-1);
}
#endif
}