Added traverse method implementation into GeometryTechnique.
This commit is contained in:
@@ -37,6 +37,9 @@ class OSGTERRAIN_EXPORT GeometryTechnique : public TerrainTechnique
|
||||
|
||||
virtual void cull(osgUtil::CullVisitor* nv);
|
||||
|
||||
/** Traverse the terain subgraph.*/
|
||||
virtual void traverse(osg::NodeVisitor& nv);
|
||||
|
||||
virtual void cleanSceneGraph();
|
||||
|
||||
virtual void dirty();
|
||||
|
||||
@@ -552,6 +552,42 @@ void GeometryTechnique::cull(osgUtil::CullVisitor* cv)
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
void GeometryTechnique::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;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
if (_dirty) init();
|
||||
|
||||
BufferData& buffer = getReadOnlyBuffer();
|
||||
if (buffer._transform.valid()) buffer._transform->accept(nv);
|
||||
}
|
||||
|
||||
|
||||
void GeometryTechnique::cleanSceneGraph()
|
||||
{
|
||||
}
|
||||
|
||||
@@ -90,6 +90,8 @@ void TerrainTechnique::traverse(osg::NodeVisitor& nv)
|
||||
}
|
||||
}
|
||||
|
||||
if (_dirty) init();
|
||||
|
||||
// otherwise fallback to the Group::traverse()
|
||||
_terrainNode->osg::Group::traverse(nv);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user