From 995af47ab9e92ea7345b87aa34e04012321e6729 Mon Sep 17 00:00:00 2001 From: Robert Osfield Date: Fri, 12 Dec 2003 13:24:23 +0000 Subject: [PATCH] Fixed merging of geometry code. --- src/osgUtil/Optimizer.cpp | 30 +++++++++++++----------------- 1 file changed, 13 insertions(+), 17 deletions(-) diff --git a/src/osgUtil/Optimizer.cpp b/src/osgUtil/Optimizer.cpp index 1d5d42c21..09db0ef8c 100644 --- a/src/osgUtil/Optimizer.cpp +++ b/src/osgUtil/Optimizer.cpp @@ -187,6 +187,14 @@ void Optimizer::optimize(osg::Node* node, unsigned int options) node->accept(mgv); } + if (options & MERGE_GEOMETRY) + { + osg::notify(osg::INFO)<<"Optimizer::optimize() doing MERGE_GEOMETRY"<accept(mgv); + } + if (options & TRISTRIP_GEOMETRY) { osg::notify(osg::INFO)<<"Optimizer::optimize() doing TRISTRIP_GEOMETRY"<accept(mgv); -#endif - } - - - } @@ -1446,6 +1441,7 @@ bool Optimizer::MergeGeometryVisitor::mergeGeode(osg::Geode& geode) #endif + // convert all polygon primitives which has 3 indices into TRIANGLES, 4 indices into QUADS. unsigned int i; for(i=0;i=65536) { // must promote to a DrawElementsUInt - osg::DrawElementsUInt* new_primitive = new osg::DrawElementsUInt(); + osg::DrawElementsUInt* new_primitive = new osg::DrawElementsUInt(primitive->getMode()); std::copy(primitiveUByte->begin(),primitiveUByte->end(),std::back_inserter(*new_primitive)); new_primitive->offsetIndices(base); (*primItr) = new_primitive; std::cout<<"Remapping to a UInt "<<(*primItr)->className()<=0) + } else if ((base+currentMaximum)>=256) { // must promote to a DrawElementsUShort - osg::DrawElementsUShort* new_primitive = new osg::DrawElementsUShort(); + osg::DrawElementsUShort* new_primitive = new osg::DrawElementsUShort(primitive->getMode()); std::copy(primitiveUByte->begin(),primitiveUByte->end(),std::back_inserter(*new_primitive)); new_primitive->offsetIndices(base); (*primItr) = new_primitive; @@ -1809,7 +1805,7 @@ bool Optimizer::MergeGeometryVisitor::mergeGeometry(osg::Geometry& lhs,osg::Geom if ((base+currentMaximum)>=65536) { // must promote to a DrawElementsUInt - osg::DrawElementsUInt* new_primitive = new osg::DrawElementsUInt(); + osg::DrawElementsUInt* new_primitive = new osg::DrawElementsUInt(primitive->getMode()); std::copy(primitiveUShort->begin(),primitiveUShort->end(),std::back_inserter(*new_primitive)); new_primitive->offsetIndices(base); (*primItr) = new_primitive;