From ae2b6669eaaeb02ce4714b5112a57c2f62a11051 Mon Sep 17 00:00:00 2001 From: Robert Osfield Date: Mon, 3 Jun 2013 13:13:18 +0000 Subject: [PATCH] Added Vec*b, Vec4ub, Vec*s, Vec*i, Vec*ui serializers --- include/osgDB/InputStream | 12 ++++++++ include/osgDB/OutputStream | 6 ++++ include/osgDB/Serializer | 59 +++++++++++++++++++++++++++++++++++++- src/osgDB/InputStream.cpp | 23 +++++++++++++++ 4 files changed, 99 insertions(+), 1 deletion(-) diff --git a/include/osgDB/InputStream b/include/osgDB/InputStream index 20fa279c9..93f44684a 100644 --- a/include/osgDB/InputStream +++ b/include/osgDB/InputStream @@ -19,6 +19,12 @@ #include #include #include +#include +#include +#include +#include +#include +#include #include #include #include @@ -101,6 +107,12 @@ public: InputStream& operator>>( osg::Vec2s& v ); InputStream& operator>>( osg::Vec3s& v ); InputStream& operator>>( osg::Vec4s& v ); + InputStream& operator>>( osg::Vec2i& v ); + InputStream& operator>>( osg::Vec3i& v ); + InputStream& operator>>( osg::Vec4i& v ); + InputStream& operator>>( osg::Vec2ui& v ); + InputStream& operator>>( osg::Vec3ui& v ); + InputStream& operator>>( osg::Vec4ui& v ); InputStream& operator>>( osg::Vec2f& v ); InputStream& operator>>( osg::Vec3f& v ); InputStream& operator>>( osg::Vec4f& v ); diff --git a/include/osgDB/OutputStream b/include/osgDB/OutputStream index f7c8b4286..2a9be1303 100644 --- a/include/osgDB/OutputStream +++ b/include/osgDB/OutputStream @@ -111,6 +111,12 @@ public: OutputStream& operator<<( const osg::Vec2s& v ); OutputStream& operator<<( const osg::Vec3s& v ); OutputStream& operator<<( const osg::Vec4s& v ); + OutputStream& operator<<( const osg::Vec2i& v ); + OutputStream& operator<<( const osg::Vec3i& v ); + OutputStream& operator<<( const osg::Vec4i& v ); + OutputStream& operator<<( const osg::Vec2ui& v ); + OutputStream& operator<<( const osg::Vec3ui& v ); + OutputStream& operator<<( const osg::Vec4ui& v ); OutputStream& operator<<( const osg::Vec2f& v ); OutputStream& operator<<( const osg::Vec3f& v ); OutputStream& operator<<( const osg::Vec4f& v ); diff --git a/include/osgDB/Serializer b/include/osgDB/Serializer index 7f75a1d9c..8d79bbc03 100644 --- a/include/osgDB/Serializer +++ b/include/osgDB/Serializer @@ -124,7 +124,10 @@ public: RW_UNDEFINED = 0, RW_USER, RW_OBJECT, RW_IMAGE, RW_LIST, RW_BOOL, RW_CHAR, RW_UCHAR, RW_SHORT, RW_USHORT, RW_INT, RW_UINT, RW_FLOAT, RW_DOUBLE, RW_VEC2F, RW_VEC2D, RW_VEC3F, RW_VEC3D, RW_VEC4F, RW_VEC4D, RW_QUAT, RW_PLANE, - RW_MATRIXF, RW_MATRIXD, RW_MATRIX, RW_GLENUM, RW_STRING, RW_ENUM + RW_MATRIXF, RW_MATRIXD, RW_MATRIX, RW_GLENUM, RW_STRING, RW_ENUM, + RW_VEC2B, RW_VEC2S, RW_VEC2I, RW_VEC2UI, + RW_VEC3B, RW_VEC3S, RW_VEC3I, RW_VEC3UI, + RW_VEC4B, RW_VEC4UB, RW_VEC4S, RW_VEC4I, RE_VEC4UI }; BaseSerializer() : _firstVersion(0), _lastVersion(INT_MAX) {} @@ -874,6 +877,23 @@ public: wrapper->addSerializer( new osgDB::PropByRefSerializer< MyClass, double >( \ #PROP, DEF, &MyClass::get##PROP, &MyClass::set##PROP), osgDB::BaseSerializer::RW_DOUBLE ) + +#define ADD_VEC2B_SERIALIZER(PROP, DEF) \ + wrapper->addSerializer( new osgDB::PropByRefSerializer< MyClass, osg::Vec2b >( \ + #PROP, DEF, &MyClass::get##PROP, &MyClass::set##PROP), osgDB::BaseSerializer::RW_VEC2B1 ) + +#define ADD_VEC2S_SERIALIZER(PROP, DEF) \ + wrapper->addSerializer( new osgDB::PropByRefSerializer< MyClass, osg::Vec2s >( \ + #PROP, DEF, &MyClass::get##PROP, &MyClass::set##PROP), osgDB::BaseSerializer::RW_VEC2S ) + +#define ADD_VEC2I_SERIALIZER(PROP, DEF) \ + wrapper->addSerializer( new osgDB::PropByRefSerializer< MyClass, osg::Vec2i >( \ + #PROP, DEF, &MyClass::get##PROP, &MyClass::set##PROP), osgDB::BaseSerializer::RW_VEC2I ) + +#define ADD_VEC2UI_SERIALIZER(PROP, DEF) \ + wrapper->addSerializer( new osgDB::PropByRefSerializer< MyClass, osg::Vec2ui >( \ + #PROP, DEF, &MyClass::get##PROP, &MyClass::set##PROP), osgDB::BaseSerializer::RW_VEC2UI ) + #define ADD_VEC2F_SERIALIZER(PROP, DEF) \ wrapper->addSerializer( new osgDB::PropByRefSerializer< MyClass, osg::Vec2f >( \ #PROP, DEF, &MyClass::get##PROP, &MyClass::set##PROP), osgDB::BaseSerializer::RW_VEC2F ) @@ -884,6 +904,23 @@ public: #define ADD_VEC2_SERIALIZER(PROP, DEF) ADD_VEC2F_SERIALIZER(PROP, DEF) + +#define ADD_VEC3B_SERIALIZER(PROP, DEF) \ + wrapper->addSerializer( new osgDB::PropByRefSerializer< MyClass, osg::Vec3b >( \ + #PROP, DEF, &MyClass::get##PROP, &MyClass::set##PROP), osgDB::BaseSerializer::RW_VEC3B ) + +#define ADD_VEC3S_SERIALIZER(PROP, DEF) \ + wrapper->addSerializer( new osgDB::PropByRefSerializer< MyClass, osg::Vec3s >( \ + #PROP, DEF, &MyClass::get##PROP, &MyClass::set##PROP), osgDB::BaseSerializer::RW_VEC3S ) + +#define ADD_VEC3I_SERIALIZER(PROP, DEF) \ + wrapper->addSerializer( new osgDB::PropByRefSerializer< MyClass, osg::Vec3i >( \ + #PROP, DEF, &MyClass::get##PROP, &MyClass::set##PROP), osgDB::BaseSerializer::RW_VEC3I ) + +#define ADD_VEC3UI_SERIALIZER(PROP, DEF) \ + wrapper->addSerializer( new osgDB::PropByRefSerializer< MyClass, osg::Vec3ui >( \ + #PROP, DEF, &MyClass::get##PROP, &MyClass::set##PROP), osgDB::BaseSerializer::RW_VEC3UI ) + #define ADD_VEC3F_SERIALIZER(PROP, DEF) \ wrapper->addSerializer( new osgDB::PropByRefSerializer< MyClass, osg::Vec3f >( \ #PROP, DEF, &MyClass::get##PROP, &MyClass::set##PROP), osgDB::BaseSerializer::RW_VEC3F ) @@ -894,6 +931,26 @@ public: #define ADD_VEC3_SERIALIZER(PROP, DEF) ADD_VEC3F_SERIALIZER(PROP, DEF) +#define ADD_VEC4B_SERIALIZER(PROP, DEF) \ + wrapper->addSerializer( new osgDB::PropByRefSerializer< MyClass, osg::Vec4b >( \ + #PROP, DEF, &MyClass::get##PROP, &MyClass::set##PROP), osgDB::BaseSerializer::RW_VEC4B ) + +#define ADD_VEC4UB_SERIALIZER(PROP, DEF) \ + wrapper->addSerializer( new osgDB::PropByRefSerializer< MyClass, osg::Vec4ub >( \ + #PROP, DEF, &MyClass::get##PROP, &MyClass::set##PROP), osgDB::BaseSerializer::RW_VEC4UB ) + +#define ADD_VEC4S_SERIALIZER(PROP, DEF) \ + wrapper->addSerializer( new osgDB::PropByRefSerializer< MyClass, osg::Vec4s >( \ + #PROP, DEF, &MyClass::get##PROP, &MyClass::set##PROP), osgDB::BaseSerializer::RW_VEC4S ) + +#define ADD_VEC4I_SERIALIZER(PROP, DEF) \ + wrapper->addSerializer( new osgDB::PropByRefSerializer< MyClass, osg::Vec4i >( \ + #PROP, DEF, &MyClass::get##PROP, &MyClass::set##PROP), osgDB::BaseSerializer::RW_VEC4I ) + +#define ADD_VEC4UI_SERIALIZER(PROP, DEF) \ + wrapper->addSerializer( new osgDB::PropByRefSerializer< MyClass, osg::Vec4ui >( \ + #PROP, DEF, &MyClass::get##PROP, &MyClass::set##PROP), osgDB::BaseSerializer::RW_VEC4UI ) + #define ADD_VEC4F_SERIALIZER(PROP, DEF) \ wrapper->addSerializer( new osgDB::PropByRefSerializer< MyClass, osg::Vec4f >( \ #PROP, DEF, &MyClass::get##PROP, &MyClass::set##PROP), osgDB::BaseSerializer::RW_VEC4F ) diff --git a/src/osgDB/InputStream.cpp b/src/osgDB/InputStream.cpp index bf0184cba..aa23a6164 100644 --- a/src/osgDB/InputStream.cpp +++ b/src/osgDB/InputStream.cpp @@ -97,6 +97,27 @@ InputStream& InputStream::operator>>( osg::Vec3s& v ) InputStream& InputStream::operator>>( osg::Vec4s& v ) { *this >> v.x() >> v.y() >> v.z() >> v.w(); return *this; } + +InputStream& InputStream::operator>>( osg::Vec2i& v ) +{ *this >> v.x() >> v.y(); return *this; } + +InputStream& InputStream::operator>>( osg::Vec3i& v ) +{ *this >> v.x() >> v.y() >> v.z(); return *this; } + +InputStream& InputStream::operator>>( osg::Vec4i& v ) +{ *this >> v.x() >> v.y() >> v.z() >> v.w(); return *this; } + + +InputStream& InputStream::operator>>( osg::Vec2ui& v ) +{ *this >> v.x() >> v.y(); return *this; } + +InputStream& InputStream::operator>>( osg::Vec3ui& v ) +{ *this >> v.x() >> v.y() >> v.z(); return *this; } + +InputStream& InputStream::operator>>( osg::Vec4ui& v ) +{ *this >> v.x() >> v.y() >> v.z() >> v.w(); return *this; } + + InputStream& InputStream::operator>>( osg::Vec2f& v ) { *this >> v.x() >> v.y(); return *this; } @@ -106,6 +127,7 @@ InputStream& InputStream::operator>>( osg::Vec3f& v ) InputStream& InputStream::operator>>( osg::Vec4f& v ) { *this >> v.x() >> v.y() >> v.z() >> v.w(); return *this; } + InputStream& InputStream::operator>>( osg::Vec2d& v ) { *this >> v.x() >> v.y(); return *this; } @@ -115,6 +137,7 @@ InputStream& InputStream::operator>>( osg::Vec3d& v ) InputStream& InputStream::operator>>( osg::Vec4d& v ) { *this >> v.x() >> v.y() >> v.z() >> v.w(); return *this; } + InputStream& InputStream::operator>>( osg::Quat& q ) { *this >> q.x() >> q.y() >> q.z() >> q.w(); return *this; }