Hi Rui, Very cool!!! :-)
Changes now merged and submitted to svn/trunk. Cheers, Robert. On 22 June 2013 05:13, Wang Rui <[email protected]> wrote: > Hi Robert, > > The file attached includes two new features for the serialization IO > functionality. First, custom serializer version control should work now, > just by defining a new REGISTER_CUSTOM_OBJECT_WRAPPER macro. For example: > > // A custom class > namespace CustomDomain { > > class MyGroup : public osg::Group > { > public: > META_Node( CustomDomain, MyGroup ); > > void setMyName( const std::string& n ); > const std::string& getMyName() const; > > void setMyID( int id ); > int getMyID() const; > > ... > }; > > } > > // The serialization wrapper using a custom domain name > REGISTER_CUSTOM_OBJECT_WRAPPER( MyDomain, > CustomDomain_MyGroup, > new CustomDomain::MyGroup, > CustomDomain::MyGroup, > "osg::Object osg::Node osg::Group > CustomDomain::MyGroup" ) > { > ADD_STRING_SERIALIZER( MyName, std::string() ); > { > UPDATE_TO_VERSION_SCOPED( 1 ); // Updated for a new domain version > ADD_INT_SERIALIZER( MyID, 0 ); > } > } > > Save the class instance as follows: > osgDB::writeNodeFile( *myGroup, "serializer_test.osgt", new > osgDB::Options("CustomDomains=MyDomain:1") ); > > The output file will include the domain version definition and all the class > data, and can be read back. We can also force setting the domain version by > the CustomDomains option while reading the saved files. If we save the class > instance without any options, MyID will be ignored because the default > domain version is 0. > > This may help third-party libraries like osgEarth to maintain their own > serializers without regarding to the OSG soversion changes. > > Another feature added is a more robust binary format, which in fact adds a > size-offset at each block's beginning. When there are problems or > unsupported data types while reading, we can now directly jump to the block > end indicated by the offset value. So a .osgb file will automatically ignore > bad data and read remains as normal (at present it will fail at all). This > feature will not break the backward compatibility, and can be disabled by > setting "RobustBinaryFormat=false" while writing out. > > Hope these changes can work smoothly with present and future community > projects. Maybe we should also consider have an osgserializer example to > test and demonstrate all things we can do now. > > Cheers, > > Wang Rui > > > _______________________________________________ > osg-submissions mailing list > [email protected] > http://lists.openscenegraph.org/listinfo.cgi/osg-submissions-openscenegraph.org > _______________________________________________ osg-submissions mailing list [email protected] http://lists.openscenegraph.org/listinfo.cgi/osg-submissions-openscenegraph.org
