Rearranged the traversal and initialization of TerrainTechnique

This commit is contained in:
Robert Osfield
2007-03-27 16:01:01 +00:00
parent e76e4e82db
commit 4688d5ae8e
6 changed files with 69 additions and 34 deletions

View File

@@ -28,14 +28,15 @@ GeometryTechnique::~GeometryTechnique()
{
}
void GeometryTechnique::initialize()
void GeometryTechnique::init()
{
osg::notify(osg::NOTICE)<<"Doing initalize"<<std::endl;
osg::notify(osg::NOTICE)<<"Doing init()"<<std::endl;
_geode = new osg::Geode;
_geometry = new osg::Geometry;
_geode->addDrawable(_geometry.get());
_dirty = false;
}
@@ -54,3 +55,13 @@ void GeometryTechnique::cull(osgUtil::CullVisitor* nv)
_geode->accept(*nv);
}
}
void GeometryTechnique::cleanSceneGraph()
{
osg::notify(osg::NOTICE)<<"Cleaning scene graph"<<std::endl;
}
void GeometryTechnique::dirty()
{
TerrainTechnique::dirty();
}

View File

@@ -38,29 +38,14 @@ TerrainNode::~TerrainNode()
void TerrainNode::traverse(osg::NodeVisitor& nv)
{
// if app traversal update the frame count.
if (nv.getVisitorType()==osg::NodeVisitor::UPDATE_VISITOR)
if (_terrainTechnique.valid())
{
osgUtil::UpdateVisitor* uv = dynamic_cast<osgUtil::UpdateVisitor*>(&nv);
if (getTerrainTechnique() && uv)
{
getTerrainTechnique()->update(uv);
return;
}
_terrainTechnique->traverse(nv);
}
else if (nv.getVisitorType()==osg::NodeVisitor::CULL_VISITOR)
else
{
osgUtil::CullVisitor* cv = dynamic_cast<osgUtil::CullVisitor*>(&nv);
if (getTerrainTechnique() && cv)
{
getTerrainTechnique()->cull(cv);
return;
}
osg::Group::traverse(nv);
}
// otherwise fallback to the Group::traverse()
Group::traverse(nv);
}
void TerrainNode::setTerrainTechnique(osgTerrain::TerrainTechnique* terrainTechnique)

View File

@@ -12,17 +12,20 @@
*/
#include <osgTerrain/TerrainTechnique>
#include <osgTerrain/TerrainNode>
using namespace osgTerrain;
TerrainTechnique::TerrainTechnique():
_terrainNode(0)
_terrainNode(0),
_dirty(true)
{
}
TerrainTechnique::TerrainTechnique(const TerrainTechnique& TerrainTechnique,const osg::CopyOp& copyop):
osg::Object(TerrainTechnique,copyop),
_terrainNode(0)
_terrainNode(0),
_dirty(true)
{
}
@@ -30,9 +33,11 @@ TerrainTechnique::~TerrainTechnique()
{
}
void TerrainTechnique::initialize()
void TerrainTechnique::init()
{
osg::notify(osg::NOTICE)<<className()<<"::initialize(..) not implementated yet"<<std::endl;
_dirty = false;
}
void TerrainTechnique::update(osgUtil::UpdateVisitor*)
@@ -52,5 +57,37 @@ void TerrainTechnique::cleanSceneGraph()
void TerrainTechnique::dirty()
{
osg::notify(osg::NOTICE)<<className()<<"::dirty(..) not implementated yet"<<std::endl;
// osg::notify(osg::NOTICE)<<className()<<"::dirty(..) not implementated yet"<<std::endl;
_dirty = true;
}
void TerrainTechnique::traverse(osg::NodeVisitor& nv)
{
if (!_terrainNode) return;
// if app traversal update the frame count.
if (nv.getVisitorType()==osg::NodeVisitor::UPDATE_VISITOR)
{
if (_dirty) init();
osgUtil::UpdateVisitor* uv = dynamic_cast<osgUtil::UpdateVisitor*>(&nv);
if (uv)
{
update(uv);
return;
}
}
else if (nv.getVisitorType()==osg::NodeVisitor::CULL_VISITOR)
{
osgUtil::CullVisitor* cv = dynamic_cast<osgUtil::CullVisitor*>(&nv);
if (cv)
{
cull(cv);
return;
}
}
// otherwise fallback to the Group::traverse()
_terrainNode->osg::Group::traverse(nv);
}