From e38c3d0303cdfb229820f40246afe943f0304de1 Mon Sep 17 00:00:00 2001 From: scrawl Date: Fri, 3 Feb 2017 17:55:32 +0100 Subject: [PATCH] Fix handling of in-scenegraph Drawables in SmoothingVisitor, TriStripVisitor and GraphicsCostEstimator --- include/osgUtil/SmoothingVisitor | 4 ++-- include/osgUtil/TriStripVisitor | 2 +- src/osg/GraphicsCostEstimator.cpp | 22 ++++++---------------- src/osgUtil/SmoothingVisitor.cpp | 8 ++------ src/osgUtil/TriStripVisitor.cpp | 8 ++------ 5 files changed, 13 insertions(+), 31 deletions(-) diff --git a/include/osgUtil/SmoothingVisitor b/include/osgUtil/SmoothingVisitor index 7afeda8ca..cccbb10d0 100644 --- a/include/osgUtil/SmoothingVisitor +++ b/include/osgUtil/SmoothingVisitor @@ -36,8 +36,8 @@ class OSGUTIL_EXPORT SmoothingVisitor : public osg::NodeVisitor /// smooth geoset by creating per vertex normals. static void smooth(osg::Geometry& geoset, double creaseAngle=osg::PI); - /// apply smoothing method to all geode geosets. - virtual void apply(osg::Geode& geode); + /// apply smoothing method to all geometries. + virtual void apply(osg::Geometry& geom); /// set the maximum angle, in radians, at which angle between adjacent triangles that normals are smoothed /// for edges that greater the shared vertices are duplicated diff --git a/include/osgUtil/TriStripVisitor b/include/osgUtil/TriStripVisitor index b73c60bdf..76ceccf0b 100644 --- a/include/osgUtil/TriStripVisitor +++ b/include/osgUtil/TriStripVisitor @@ -53,7 +53,7 @@ class OSGUTIL_EXPORT TriStripVisitor : public BaseOptimizerVisitor void stripify(); /// Accumulate the Geometry drawables to make into strips. - virtual void apply(osg::Geode& geode); + virtual void apply(osg::Geometry& geom); inline void setCacheSize( unsigned int size ) { diff --git a/src/osg/GraphicsCostEstimator.cpp b/src/osg/GraphicsCostEstimator.cpp index 36fec361e..b5b9895d8 100644 --- a/src/osg/GraphicsCostEstimator.cpp +++ b/src/osg/GraphicsCostEstimator.cpp @@ -205,15 +205,10 @@ public: traverse(node); } - virtual void apply(osg::Geode& geode) + virtual void apply(osg::Geometry& geom) { - apply(geode.getStateSet()); - for(unsigned int i=0; igetStateSet()); - osg::Geometry* geometry = geode.getDrawable(i)->asGeometry(); - if (geometry) apply(geometry); - } + apply(geom.getStateSet()); + apply(&geom); } void apply(osg::StateSet* stateset) @@ -282,15 +277,10 @@ public: traverse(node); } - virtual void apply(osg::Geode& geode) + virtual void apply(osg::Geometry& geom) { - apply(geode.getStateSet()); - for(unsigned int i=0; igetStateSet()); - osg::Geometry* geometry = geode.getDrawable(i)->asGeometry(); - if (geometry) apply(geometry); - } + apply(geom.getStateSet()); + apply(&geom); } void apply(osg::StateSet* stateset) diff --git a/src/osgUtil/SmoothingVisitor.cpp b/src/osgUtil/SmoothingVisitor.cpp index 2112fda6c..89eeb45b5 100644 --- a/src/osgUtil/SmoothingVisitor.cpp +++ b/src/osgUtil/SmoothingVisitor.cpp @@ -702,11 +702,7 @@ void SmoothingVisitor::smooth(osg::Geometry& geom, double creaseAngle) } -void SmoothingVisitor::apply(osg::Geode& geode) +void SmoothingVisitor::apply(osg::Geometry& geom) { - for(unsigned int i = 0; i < geode.getNumDrawables(); i++ ) - { - osg::Geometry* geom = dynamic_cast(geode.getDrawable(i)); - if (geom) smooth(*geom, _creaseAngle); - } + smooth(geom, _creaseAngle); } diff --git a/src/osgUtil/TriStripVisitor.cpp b/src/osgUtil/TriStripVisitor.cpp index 24ae1ea00..074bfb890 100644 --- a/src/osgUtil/TriStripVisitor.cpp +++ b/src/osgUtil/TriStripVisitor.cpp @@ -629,11 +629,7 @@ void TriStripVisitor::stripify() } } -void TriStripVisitor::apply(Geode& geode) +void TriStripVisitor::apply(Geometry& geom) { - for(unsigned int i = 0; i < geode.getNumDrawables(); ++i ) - { - osg::Geometry* geom = dynamic_cast(geode.getDrawable(i)); - if (geom) _geometryList.insert(geom); - } + _geometryList.insert(&geom); }