diff --git a/src/osgUtil/Tessellator.cpp b/src/osgUtil/Tessellator.cpp index 503f04252..d410ce298 100644 --- a/src/osgUtil/Tessellator.cpp +++ b/src/osgUtil/Tessellator.cpp @@ -436,8 +436,9 @@ void Tessellator::handleNewVertices(osg::Geometry& geom,VertexPtrToIndexMap &ver { if (!_newVertexList.empty()) { - osg::Vec3Array* vertices = dynamic_cast(geom.getVertexArray()); + if (!vertices) return; + osg::Vec3Array* normals = NULL; if (osg::getBinding(geom.getNormalArray())==osg::Array::BIND_PER_VERTEX) { @@ -583,29 +584,34 @@ void CALLBACK Tessellator::errorCallback(GLenum errorCode, void* userData) void Tessellator::reduceArray(osg::Array * cold, const unsigned int nnu) { // shrinks size of array to N - if (cold && cold->getNumElements()>nnu) { + if (cold && cold->getNumElements()>nnu) + { osg::Vec2Array* v2arr = NULL; osg::Vec3Array* v3arr = NULL; osg::Vec4Array* v4arr = NULL; - switch (cold->getType()) { - case osg::Array::Vec2ArrayType: { - v2arr = dynamic_cast(cold); + switch (cold->getType()) + { + case osg::Array::Vec2ArrayType: + { + v2arr = static_cast(cold); osg::Vec2Array::iterator itr=v2arr->begin()+nnu; (*v2arr).erase(itr, v2arr->end()); - } - break; - case osg::Array::Vec3ArrayType: { - v3arr = dynamic_cast(cold); + } + break; + case osg::Array::Vec3ArrayType: + { + v3arr = static_cast(cold); osg::Vec3Array::iterator itr=v3arr->begin()+nnu; (*v3arr).erase(itr, v3arr->end()); - } - break; - case osg::Array::Vec4ArrayType: { - v4arr = dynamic_cast(cold); + } + break; + case osg::Array::Vec4ArrayType: + { + v4arr = static_cast(cold); osg::Vec4Array::iterator itr=v4arr->begin()+nnu; (*v4arr).erase(itr, v4arr->end()); - } - break; + } + break; default: // should also handle:ArrayType' ByteArrayType' ShortArrayType' IntArrayType' // `UShortArrayType' `UIntArrayType' `Vec4ubArrayType' `FloatArrayType' break; @@ -618,6 +624,9 @@ void Tessellator::collectTessellation(osg::Geometry &geom, unsigned int /*origin if (geom.containsDeprecatedData()) geom.fixDeprecatedData(); osg::Vec3Array* vertices = dynamic_cast(geom.getVertexArray()); + if (!vertices) return; + + VertexPtrToIndexMap vertexPtrToIndexMap; // populate the VertexPtrToIndexMap.