diff --git a/include/osgDB/Serializer b/include/osgDB/Serializer index 87c55ef68..4eea99d7e 100644 --- a/include/osgDB/Serializer +++ b/include/osgDB/Serializer @@ -58,6 +58,18 @@ public: _stringToValue[str] = value; } + void add2(const char* str, const char* newStr, Value value) { + if (_valueToString.find(value) != _valueToString.end()) + { + osg::notify(osg::INFO) << "Duplicate enum value " << value + << " with old string: " << _valueToString[value] + << " and new strings: " << str << " and " << newStr << std::endl; + } + _valueToString[value] = newStr; + _stringToValue[newStr] = value; + _stringToValue[str] = value; + } + Value getValue( const char* str ) { StringToValue::iterator itr = _stringToValue.find(str); diff --git a/src/osgDB/InputStream.cpp b/src/osgDB/InputStream.cpp index 6d2de5ff5..e1cdb734d 100644 --- a/src/osgDB/InputStream.cpp +++ b/src/osgDB/InputStream.cpp @@ -858,12 +858,13 @@ osg::ref_ptr InputStream::readImage(bool readFromExternal) } else { - image = readObjectFieldsOfType("osg::Object", id, image.get()); + image = readObjectFieldsOfType("osg::Object", id, image.get());// leaves _identifierMap[id] pointing at DummyObject if image invalid if ( image.valid() ) { image->setFileName( name ); image->setWriteHint( (osg::Image::WriteHint)writeHint ); } + _identifierMap[id] = image;//valid or invalid, don't leave this pointing at an osg::Dummyobject as it's used with a static_cast when recycled } return image; } diff --git a/src/osgDB/ObjectWrapper.cpp b/src/osgDB/ObjectWrapper.cpp index ef0d8eab0..01d2eebc1 100644 --- a/src/osgDB/ObjectWrapper.cpp +++ b/src/osgDB/ObjectWrapper.cpp @@ -696,15 +696,10 @@ ObjectWrapperManager::ObjectWrapperManager() primitiveTable.add( "GL_QUAD_STRIP", GL_QUAD_STRIP ); primitiveTable.add( "GL_POLYGON", GL_POLYGON ); - primitiveTable.add( "GL_LINES_ADJACENCY_EXT", GL_LINES_ADJACENCY_EXT ); - primitiveTable.add( "GL_LINE_STRIP_ADJACENCY_EXT", GL_LINE_STRIP_ADJACENCY_EXT ); - primitiveTable.add( "GL_TRIANGLES_ADJACENCY_EXT", GL_TRIANGLES_ADJACENCY_EXT ); - primitiveTable.add( "GL_TRIANGLE_STRIP_ADJACENCY_EXT", GL_TRIANGLE_STRIP_ADJACENCY_EXT ); - - primitiveTable.add( "GL_LINES_ADJACENCY", GL_LINES_ADJACENCY ); - primitiveTable.add( "GL_LINE_STRIP_ADJACENCY", GL_LINE_STRIP_ADJACENCY ); - primitiveTable.add( "GL_TRIANGLES_ADJACENCY", GL_TRIANGLES_ADJACENCY ); - primitiveTable.add( "GL_TRIANGLE_STRIP_ADJACENCY", GL_TRIANGLE_STRIP_ADJACENCY ); + primitiveTable.add2("GL_LINES_ADJACENCY_EXT", "GL_LINES_ADJACENCY", GL_LINES_ADJACENCY ); + primitiveTable.add2("GL_LINE_STRIP_ADJACENCY_EXT", "GL_LINE_STRIP_ADJACENCY", GL_LINE_STRIP_ADJACENCY ); + primitiveTable.add2("GL_TRIANGLES_ADJACENCY_EXT", "GL_TRIANGLES_ADJACENCY", GL_TRIANGLES_ADJACENCY ); + primitiveTable.add2("GL_TRIANGLE_STRIP_ADJACENCY_EXT", "GL_TRIANGLE_STRIP_ADJACENCY", GL_TRIANGLE_STRIP_ADJACENCY ); primitiveTable.add( "GL_PATCHES", GL_PATCHES ); }