From 89786dd42a8dee13c9c351448c91158fc060ac5b Mon Sep 17 00:00:00 2001 From: Robert Osfield Date: Fri, 8 Aug 2014 16:09:39 +0000 Subject: [PATCH] From Marc Helbling, "please find a fix for the vertex pretransform visitor (VertexAccessOrderVisitor). The issue with current code is that arrays are collected *before* duplicating shared arrays which leads to arrays that are correctly duplicated but that are not reordered. Also the submitted patch contains a small cleaning in GeometryArrayGathrer as the _useDrawElements variable is not used; it is only set in the GeometryArrayGathrer constructor and VertexAccessOrderVisitor already checks that primitives have indexed type." git-svn-id: http://svn.openscenegraph.org/osg/OpenSceneGraph/trunk@14403 16af8721-9629-0410-8352-f15c8da7e697 --- src/osgUtil/MeshOptimizers.cpp | 8 +------- 1 file changed, 1 insertion(+), 7 deletions(-) diff --git a/src/osgUtil/MeshOptimizers.cpp b/src/osgUtil/MeshOptimizers.cpp index b77fcbf75..250f339e8 100644 --- a/src/osgUtil/MeshOptimizers.cpp +++ b/src/osgUtil/MeshOptimizers.cpp @@ -60,7 +60,6 @@ struct GeometryArrayGatherer typedef std::vector ArrayList; GeometryArrayGatherer(osg::Geometry& geometry) - : _useDrawElements(true) { add(geometry.getVertexArray()); add(geometry.getNormalArray()); @@ -97,9 +96,6 @@ struct GeometryArrayGatherer } ArrayList _arrayList; - // True if geometry contains bindings that are compatible with - // DrawElements. - bool _useDrawElements; }; // Compare vertices in a mesh using all their attributes. The vertices @@ -1124,9 +1120,6 @@ void VertexAccessOrderVisitor::optimizeOrder(Geometry& geom) if (!vertArray) return; Geometry::PrimitiveSetList& primSets = geom.getPrimitiveSetList(); - GeometryArrayGatherer gatherer(geom); - if (!gatherer._useDrawElements) - return; VertexReorder vr(vertArray->getNumElements()); for (Geometry::PrimitiveSetList::iterator itr = primSets.begin(), end = primSets.end(); @@ -1144,6 +1137,7 @@ void VertexAccessOrderVisitor::optimizeOrder(Geometry& geom) // duplicate shared arrays as it isn't safe to rearrange vertices when arrays are shared. if (geom.containsSharedArrays()) geom.duplicateSharedArrays(); + GeometryArrayGatherer gatherer(geom); Remapper remapper(vr.remap); gatherer.accept(remapper);