From Wang Rui, "I modified the Serializer header to add a UPDATE_TO_VERSION_SCOPED
macro, which could set version within brackets and reset it after that. All related serializers are also modified so that the backward-compatibility bug reported by Farshid can be fixed. " From Robert Osfield, removed the use of osg::Referenced and creating the proxy object on the heap.
This commit is contained in:
parent
16de7e9f33
commit
9fab99ddd9
@ -50,7 +50,9 @@ public:
|
||||
|
||||
ObjectWrapper( osg::Object* proto, const std::string& name,
|
||||
const std::string& associates );
|
||||
|
||||
void setUpdatedVersion( int ver ) { _version = ver; }
|
||||
int getUpdatedVersion() const { return _version; }
|
||||
|
||||
const osg::Object* getProto() const { return _proto.get(); }
|
||||
const std::string& getName() const { return _name; }
|
||||
@ -83,6 +85,23 @@ protected:
|
||||
int _version; // Last updated version of the wrapper
|
||||
};
|
||||
|
||||
struct UpdateWrapperVersionProxy
|
||||
{
|
||||
UpdateWrapperVersionProxy( ObjectWrapper* w, int v ): _wrapper(w)
|
||||
{
|
||||
_lastVersion = w->getUpdatedVersion();
|
||||
w->setUpdatedVersion(v);
|
||||
}
|
||||
|
||||
~UpdateWrapperVersionProxy()
|
||||
{
|
||||
_wrapper->setUpdatedVersion(_lastVersion);
|
||||
}
|
||||
|
||||
ObjectWrapper* _wrapper;
|
||||
int _lastVersion;
|
||||
};
|
||||
|
||||
class Registry;
|
||||
|
||||
class OSGDB_EXPORT ObjectWrapperManager : public osg::Referenced
|
||||
|
@ -977,6 +977,9 @@ public:
|
||||
#define UPDATE_TO_VERSION(VER) \
|
||||
wrapper->setUpdatedVersion( (VER) );
|
||||
|
||||
#define UPDATE_TO_VERSION_SCOPED(VER) \
|
||||
osgDB::UpdateWrapperVersionProxy uwvp(wrapper, (VER));
|
||||
|
||||
#define REMOVE_SERIALIZER(PROP) \
|
||||
wrapper->markSerializerAsRemoved( #PROP );
|
||||
|
||||
|
@ -79,8 +79,8 @@ REGISTER_OBJECT_WRAPPER( Node,
|
||||
ADD_HEXINT_SERIALIZER( NodeMask, 0xffffffff ); // _nodeMask
|
||||
|
||||
ADD_USER_SERIALIZER( Descriptions ); // _descriptions, deprecated
|
||||
UPDATE_TO_VERSION( 77 )
|
||||
{
|
||||
UPDATE_TO_VERSION_SCOPED( 77 )
|
||||
REMOVE_SERIALIZER( Descriptions );
|
||||
}
|
||||
|
||||
|
@ -42,9 +42,8 @@ REGISTER_OBJECT_WRAPPER( Object,
|
||||
END_ENUM_SERIALIZER(); // _dataVariance
|
||||
|
||||
ADD_USER_SERIALIZER( UserData ); // _userData, deprecated
|
||||
|
||||
UPDATE_TO_VERSION( 77 )
|
||||
{
|
||||
UPDATE_TO_VERSION_SCOPED( 77 )
|
||||
REMOVE_SERIALIZER( UserData );
|
||||
ADD_OBJECT_SERIALIZER( UserDataContainer, osg::UserDataContainer, NULL );
|
||||
}
|
||||
|
@ -145,8 +145,8 @@ REGISTER_OBJECT_WRAPPER( PagedLOD,
|
||||
ADD_USER_SERIALIZER( RangeDataList ); // _perRangeDataList
|
||||
ADD_USER_SERIALIZER( Children ); // _children (which are not loaded from external)
|
||||
|
||||
UPDATE_TO_VERSION( 70 )
|
||||
{
|
||||
UPDATE_TO_VERSION_SCOPED( 70 )
|
||||
REMOVE_SERIALIZER( FrameNumberOfLastTraversal );
|
||||
}
|
||||
|
||||
|
@ -15,8 +15,8 @@ REGISTER_OBJECT_WRAPPER( osgText_Text3D,
|
||||
ADD_ENUM_VALUE( PER_GLYPH );
|
||||
END_ENUM_SERIALIZER(); // _renderMode
|
||||
|
||||
UPDATE_TO_VERSION( 68 )
|
||||
{
|
||||
UPDATE_TO_VERSION_SCOPED( 68 )
|
||||
ADD_VEC4_SERIALIZER( Color, osg::Vec4(1.0,1.0,1.0,1.0) ); // _color
|
||||
}
|
||||
}
|
||||
|
@ -42,8 +42,8 @@ REGISTER_OBJECT_WRAPPER( osgVolume_Locator,
|
||||
ADD_MATRIXD_SERIALIZER( Transform, osg::Matrixd() ); // _transform
|
||||
|
||||
ADD_USER_SERIALIZER( LocatorCallbacks );
|
||||
UPDATE_TO_VERSION( 90 )
|
||||
{
|
||||
UPDATE_TO_VERSION_SCOPED( 90 )
|
||||
REMOVE_SERIALIZER( LocatorCallbacks );
|
||||
}
|
||||
}
|
||||
|
@ -28,8 +28,8 @@ REGISTER_OBJECT_WRAPPER( osgVolume_VolumeTile,
|
||||
"osg::Object osg::Node osg::Group osgVolume::VolumeTile" )
|
||||
{
|
||||
ADD_OBJECT_SERIALIZER( Volume, osgVolume::Volume, NULL ); // _volume
|
||||
UPDATE_TO_VERSION( 90 )
|
||||
{
|
||||
UPDATE_TO_VERSION_SCOPED( 90 )
|
||||
REMOVE_SERIALIZER( Volume );
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user