diff --git a/src/osg/Geometry.cpp b/src/osg/Geometry.cpp index 9484bdf53..8da42229d 100644 --- a/src/osg/Geometry.cpp +++ b/src/osg/Geometry.cpp @@ -1236,28 +1236,43 @@ void Geometry::duplicateSharedArrays() } } +inline osg::IndexArray* getIndexArray(osg::Array* array) +{ + return array ? dynamic_cast(array->getUserData()) : 0; +} + +inline bool containsDeprecatedUsage(osg::Array* array) +{ + if (array) + { + if (array->getBinding()==3 /* BIND_PER_PRIMITIVE */) return true; + if (dynamic_cast(array->getUserData())!=0) return true; + } + return true; +} + bool Geometry::checkForDeprecatedData() { _containsDeprecatedData = false; - if (getVertexIndices()) _containsDeprecatedData = true; + if (containsDeprecatedUsage(_vertexArray.get())) _containsDeprecatedData = true; - if (getNormalIndices() || getNormalBinding()==osg::Geometry::BIND_PER_PRIMITIVE) _containsDeprecatedData = true; + if (containsDeprecatedUsage(_normalArray.get())) _containsDeprecatedData = true; - if (getColorIndices() || getColorBinding()==osg::Geometry::BIND_PER_PRIMITIVE) _containsDeprecatedData = true; + if (containsDeprecatedUsage(_colorArray.get())) _containsDeprecatedData = true; - if (getSecondaryColorIndices() || getSecondaryColorBinding()==osg::Geometry::BIND_PER_PRIMITIVE) _containsDeprecatedData = true; + if (containsDeprecatedUsage(_secondaryColorArray.get())) _containsDeprecatedData = true; - if (getFogCoordIndices() || getFogCoordBinding()==osg::Geometry::BIND_PER_PRIMITIVE) _containsDeprecatedData = true; + if (containsDeprecatedUsage(_fogCoordArray.get())) _containsDeprecatedData = true; for(unsigned int ti=0;tigetBinding()==osg::Array::BIND_PER_VERTEX) duplicateArray(perVertexArrays, _normalArray, numVertices); - else if (_normalArray->getBinding()==osg::Array::BIND_PER_PRIMITIVE) duplicateArray(perPrimitiveArrays, _normalArray, numVertices); + else if (_normalArray->getBinding()==3 /*osg::Array::BIND_PER_PRIMITIVE*/) duplicateArray(perPrimitiveArrays, _normalArray, numVertices); } if (_colorArray.valid()) { if (_colorArray->getBinding()==osg::Array::BIND_PER_VERTEX) duplicateArray(perVertexArrays, _colorArray, numVertices); - else if (_colorArray->getBinding()==osg::Array::BIND_PER_PRIMITIVE) duplicateArray(perPrimitiveArrays, _colorArray, numVertices); + else if (_colorArray->getBinding()==3 /*osg::Array::BIND_PER_PRIMITIVE*/) duplicateArray(perPrimitiveArrays, _colorArray, numVertices); } if (_secondaryColorArray.valid()) { if (_secondaryColorArray->getBinding()==osg::Array::BIND_PER_VERTEX) duplicateArray(perVertexArrays, _secondaryColorArray, numVertices); - else if (_secondaryColorArray->getBinding()==osg::Array::BIND_PER_PRIMITIVE) duplicateArray(perPrimitiveArrays, _secondaryColorArray, numVertices); + else if (_secondaryColorArray->getBinding()==3 /*osg::Array::BIND_PER_PRIMITIVE*/) duplicateArray(perPrimitiveArrays, _secondaryColorArray, numVertices); } if (_fogCoordArray.valid()) { if (_fogCoordArray->getBinding()==osg::Array::BIND_PER_VERTEX) duplicateArray(perVertexArrays, _fogCoordArray, numVertices); - else if (_fogCoordArray->getBinding()==osg::Array::BIND_PER_PRIMITIVE) duplicateArray(perPrimitiveArrays, _fogCoordArray, numVertices); + else if (_fogCoordArray->getBinding()==3 /*osg::Array::BIND_PER_PRIMITIVE*/) duplicateArray(perPrimitiveArrays, _fogCoordArray, numVertices); } for(ArrayList::iterator itr = _texCoordList.begin(); @@ -1480,7 +1481,7 @@ void Geometry::fixDeprecatedData() if (itr->valid()) { if ((*itr)->getBinding()==osg::Array::BIND_PER_VERTEX) duplicateArray(perVertexArrays, *itr, numVertices); - else if ((*itr)->getBinding()==osg::Array::BIND_PER_PRIMITIVE) duplicateArray(perPrimitiveArrays, *itr, numVertices); + else if ((*itr)->getBinding()==3 /*osg::Array::BIND_PER_PRIMITIVE*/) duplicateArray(perPrimitiveArrays, *itr, numVertices); } } @@ -1491,7 +1492,7 @@ void Geometry::fixDeprecatedData() if (itr->valid()) { if ((*itr)->getBinding()==osg::Array::BIND_PER_VERTEX) duplicateArray(perVertexArrays, *itr, numVertices); - else if ((*itr)->getBinding()==osg::Array::BIND_PER_PRIMITIVE) duplicateArray(perPrimitiveArrays, *itr, numVertices); + else if ((*itr)->getBinding()==3 /*osg::Array::BIND_PER_PRIMITIVE*/) duplicateArray(perPrimitiveArrays, *itr, numVertices); } }