From cb1e1183c72e8fb3411be405136462a44d704d93 Mon Sep 17 00:00:00 2001 From: Robert Osfield Date: Thu, 25 Jul 2002 16:15:01 +0000 Subject: [PATCH] Fix to geometry combiner which wasn't check the overall color array values in the lessGeometry functor. --- src/osgUtil/Optimizer.cpp | 25 ++++++++++++++++++++----- 1 file changed, 20 insertions(+), 5 deletions(-) diff --git a/src/osgUtil/Optimizer.cpp b/src/osgUtil/Optimizer.cpp index 2047ccbde..49fba8b9e 100644 --- a/src/osgUtil/Optimizer.cpp +++ b/src/osgUtil/Optimizer.cpp @@ -21,8 +21,6 @@ using namespace osgUtil; void Optimizer::optimize(osg::Node* node, unsigned int options) { - - if (options & COMBINE_ADJACENT_LODS) { CombineLODsVisitor clv; @@ -70,7 +68,6 @@ void Optimizer::optimize(osg::Node* node, unsigned int options) // ConvertGeoSetsToGeometryVisitor cgtg; // node->accept(cgtg); - if (options & SHARE_DUPLICATE_STATE) { #if (defined(_MSC_VER) && _MSC_VER<1300 && !defined(_STLPORT_VERSION)) @@ -1205,8 +1202,26 @@ struct LessGeometry if (lhs->getColorBinding()==osg::Geometry::BIND_OVERALL) { - if (lhs->getColorArray()->getType()getColorArray()->getType()) return true; - if (rhs->getColorArray()->getType()getColorArray()->getType()) return false; + const osg::Array* lhs_colorArray = lhs->getColorArray(); + const osg::Array* rhs_colorArray = rhs->getColorArray(); + if (lhs_colorArray->getType()getType()) return true; + if (rhs_colorArray->getType()getType()) return false; + switch(lhs_colorArray->getType()) + { + case(osg::Array::UByte4ArrayType): + if ((*static_cast(lhs_colorArray))[0]<(*static_cast(rhs_colorArray))[0]) return true; + if ((*static_cast(lhs_colorArray))[0]>(*static_cast(rhs_colorArray))[0]) return false; + case(osg::Array::Vec3ArrayType): + if ((*static_cast(lhs_colorArray))[0]<(*static_cast(rhs_colorArray))[0]) return true; + if ((*static_cast(lhs_colorArray))[0]>(*static_cast(rhs_colorArray))[0]) return false; + case(osg::Array::Vec4ArrayType): + if ((*static_cast(lhs_colorArray))[0]<(*static_cast(rhs_colorArray))[0]) return true; + if ((*static_cast(lhs_colorArray))[0]>(*static_cast(rhs_colorArray))[0]) return false; + break; + default: + break; + } + } return false;