From 4fd6566e0087e72dd40ed5b30072994f710bae90 Mon Sep 17 00:00:00 2001 From: Robert Osfield Date: Fri, 28 Jun 2013 08:57:42 +0000 Subject: [PATCH] From David Callu, serializer support for new Vec* and Vec*Array classes --- include/osgDB/DataTypes | 5 ++++ include/osgDB/InputStream | 5 ++++ include/osgDB/OutputStream | 5 ++++ include/osgDB/Serializer | 28 ++++++++++++++--- src/osgDB/InputStream.cpp | 60 ++++++++++++++++++++++++++++++++++++- src/osgDB/ObjectWrapper.cpp | 5 ++++ src/osgDB/OutputStream.cpp | 35 ++++++++++++++++++++++ 7 files changed, 138 insertions(+), 5 deletions(-) diff --git a/include/osgDB/DataTypes b/include/osgDB/DataTypes index c6d302871..942530504 100644 --- a/include/osgDB/DataTypes +++ b/include/osgDB/DataTypes @@ -58,6 +58,11 @@ const int ID_VEC4_ARRAY = 17; const int ID_VEC2D_ARRAY = 18; const int ID_VEC3D_ARRAY = 19; const int ID_VEC4D_ARRAY = 20; +const int ID_VEC2UB_ARRAY = 21; +const int ID_VEC3UB_ARRAY = 22; +const int ID_VEC2US_ARRAY = 23; +const int ID_VEC3US_ARRAY = 24; +const int ID_VEC4US_ARRAY = 25; const int ID_DRAWARRAYS = 50; const int ID_DRAWARRAY_LENGTH = 51; diff --git a/include/osgDB/InputStream b/include/osgDB/InputStream index 8ccb29b5c..7eb714b0b 100644 --- a/include/osgDB/InputStream +++ b/include/osgDB/InputStream @@ -105,10 +105,15 @@ public: InputStream& operator>>( osg::Vec2b& v ); InputStream& operator>>( osg::Vec3b& v ); InputStream& operator>>( osg::Vec4b& v ); + InputStream& operator>>( osg::Vec2ub& v ); + InputStream& operator>>( osg::Vec3ub& v ); InputStream& operator>>( osg::Vec4ub& v ); InputStream& operator>>( osg::Vec2s& v ); InputStream& operator>>( osg::Vec3s& v ); InputStream& operator>>( osg::Vec4s& v ); + InputStream& operator>>( osg::Vec2us& v ); + InputStream& operator>>( osg::Vec3us& v ); + InputStream& operator>>( osg::Vec4us& v ); InputStream& operator>>( osg::Vec2i& v ); InputStream& operator>>( osg::Vec3i& v ); InputStream& operator>>( osg::Vec4i& v ); diff --git a/include/osgDB/OutputStream b/include/osgDB/OutputStream index 393d4c186..b2f86b6c4 100644 --- a/include/osgDB/OutputStream +++ b/include/osgDB/OutputStream @@ -110,10 +110,15 @@ public: OutputStream& operator<<( const osg::Vec2b& v ); OutputStream& operator<<( const osg::Vec3b& v ); OutputStream& operator<<( const osg::Vec4b& v ); + OutputStream& operator<<( const osg::Vec2ub& v ); + OutputStream& operator<<( const osg::Vec3ub& v ); OutputStream& operator<<( const osg::Vec4ub& v ); OutputStream& operator<<( const osg::Vec2s& v ); OutputStream& operator<<( const osg::Vec3s& v ); OutputStream& operator<<( const osg::Vec4s& v ); + OutputStream& operator<<( const osg::Vec2us& v ); + OutputStream& operator<<( const osg::Vec3us& v ); + OutputStream& operator<<( const osg::Vec4us& v ); OutputStream& operator<<( const osg::Vec2i& v ); OutputStream& operator<<( const osg::Vec3i& v ); OutputStream& operator<<( const osg::Vec4i& v ); diff --git a/include/osgDB/Serializer b/include/osgDB/Serializer index 8d79bbc03..c1db37223 100644 --- a/include/osgDB/Serializer +++ b/include/osgDB/Serializer @@ -125,9 +125,9 @@ public: 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_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 + RW_VEC2B, RW_VEC2UB, RW_VEC2S, RW_VEC2US, RW_VEC2I, RW_VEC2UI, + RW_VEC3B, RW_VEC3UB, RW_VEC3S, RW_VEC3US, RW_VEC3I, RW_VEC3UI, + RW_VEC4B, RW_VEC4UB, RW_VEC4S, RW_VEC4US, RW_VEC4I, RE_VEC4UI }; BaseSerializer() : _firstVersion(0), _lastVersion(INT_MAX) {} @@ -880,12 +880,20 @@ public: #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 ) + #PROP, DEF, &MyClass::get##PROP, &MyClass::set##PROP), osgDB::BaseSerializer::RW_VEC2B ) + +#define ADD_VEC2UB_SERIALIZER(PROP, DEF) \ + wrapper->addSerializer( new osgDB::PropByRefSerializer< MyClass, osg::Vec2ub >( \ + #PROP, DEF, &MyClass::get##PROP, &MyClass::set##PROP), osgDB::BaseSerializer::RW_VEC2UB ) #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_VEC2US_SERIALIZER(PROP, DEF) \ + wrapper->addSerializer( new osgDB::PropByRefSerializer< MyClass, osg::Vec2us >( \ + #PROP, DEF, &MyClass::get##PROP, &MyClass::set##PROP), osgDB::BaseSerializer::RW_VEC2US ) + #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 ) @@ -909,10 +917,18 @@ public: wrapper->addSerializer( new osgDB::PropByRefSerializer< MyClass, osg::Vec3b >( \ #PROP, DEF, &MyClass::get##PROP, &MyClass::set##PROP), osgDB::BaseSerializer::RW_VEC3B ) +#define ADD_VEC3UB_SERIALIZER(PROP, DEF) \ + wrapper->addSerializer( new osgDB::PropByRefSerializer< MyClass, osg::Vec3ub >( \ + #PROP, DEF, &MyClass::get##PROP, &MyClass::set##PROP), osgDB::BaseSerializer::RW_VEC3UB ) + #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_VEC3US_SERIALIZER(PROP, DEF) \ + wrapper->addSerializer( new osgDB::PropByRefSerializer< MyClass, osg::Vec3us >( \ + #PROP, DEF, &MyClass::get##PROP, &MyClass::set##PROP), osgDB::BaseSerializer::RW_VEC3US ) + #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 ) @@ -943,6 +959,10 @@ public: wrapper->addSerializer( new osgDB::PropByRefSerializer< MyClass, osg::Vec4s >( \ #PROP, DEF, &MyClass::get##PROP, &MyClass::set##PROP), osgDB::BaseSerializer::RW_VEC4S ) +#define ADD_VEC4US_SERIALIZER(PROP, DEF) \ + wrapper->addSerializer( new osgDB::PropByRefSerializer< MyClass, osg::Vec4us >( \ + #PROP, DEF, &MyClass::get##PROP, &MyClass::set##PROP), osgDB::BaseSerializer::RW_VEC4US ) + #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 ) diff --git a/src/osgDB/InputStream.cpp b/src/osgDB/InputStream.cpp index 52851e08c..e30c95e3a 100644 --- a/src/osgDB/InputStream.cpp +++ b/src/osgDB/InputStream.cpp @@ -101,9 +101,23 @@ InputStream& InputStream::operator>>( osg::Vec4b& v ) return *this; } +InputStream& InputStream::operator>>( osg::Vec2ub& v ) +{ + unsigned char x, y; *this >> x >> y; + v.set( x, y ); + return *this; +} + +InputStream& InputStream::operator>>( osg::Vec3ub& v ) +{ + unsigned char x, y, z; *this >> x >> y >> z; + v.set( x, y, z ); + return *this; +} + InputStream& InputStream::operator>>( osg::Vec4ub& v ) { - char r, g, b, a; *this >> r >> g >> b >> a; + unsigned char r, g, b, a; *this >> r >> g >> b >> a; v.set( r, g, b, a ); return *this; } @@ -117,6 +131,15 @@ 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::Vec2us& v ) +{ *this >> v.x() >> v.y(); return *this; } + +InputStream& InputStream::operator>>( osg::Vec3us& v ) +{ *this >> v.x() >> v.y() >> v.z(); return *this; } + +InputStream& InputStream::operator>>( osg::Vec4us& 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; } @@ -360,6 +383,20 @@ osg::Array* InputStream::readArray() array = va; } break; + case ID_VEC2UB_ARRAY: + { + osg::Vec2ubArray* va = new osg::Vec2ubArray; + readArrayImplementation( va, 2, CHAR_SIZE ); + array = va; + } + break; + case ID_VEC3UB_ARRAY: + { + osg::Vec3ubArray* va = new osg::Vec3ubArray; + readArrayImplementation( va, 3, CHAR_SIZE ); + array = va; + } + break; case ID_VEC4UB_ARRAY: { osg::Vec4ubArray* va = new osg::Vec4ubArray; @@ -388,6 +425,27 @@ osg::Array* InputStream::readArray() array = va; } break; + case ID_VEC2US_ARRAY: + { + osg::Vec2usArray* va = new osg::Vec2usArray; + readArrayImplementation( va, 2, SHORT_SIZE ); + array = va; + } + break; + case ID_VEC3US_ARRAY: + { + osg::Vec3usArray* va = new osg::Vec3usArray; + readArrayImplementation( va, 3, SHORT_SIZE ); + array = va; + } + break; + case ID_VEC4US_ARRAY: + { + osg::Vec4usArray* va = new osg::Vec4usArray; + readArrayImplementation( va, 4, SHORT_SIZE ); + array = va; + } + break; case ID_VEC2_ARRAY: { osg::Vec2Array* va = new osg::Vec2Array; diff --git a/src/osgDB/ObjectWrapper.cpp b/src/osgDB/ObjectWrapper.cpp index 356f9511e..7973bade1 100644 --- a/src/osgDB/ObjectWrapper.cpp +++ b/src/osgDB/ObjectWrapper.cpp @@ -519,10 +519,15 @@ ObjectWrapperManager::ObjectWrapperManager() arrayTable.add( "Vec2bArray", ID_VEC2B_ARRAY ); arrayTable.add( "Vec3bArray", ID_VEC3B_ARRAY ); arrayTable.add( "Vec4bArray", ID_VEC4B_ARRAY ); + arrayTable.add( "Vec2ubArray", ID_VEC2UB_ARRAY ); + arrayTable.add( "Vec3ubArray", ID_VEC3UB_ARRAY ); arrayTable.add( "Vec4ubArray", ID_VEC4UB_ARRAY ); arrayTable.add( "Vec2sArray", ID_VEC2S_ARRAY ); arrayTable.add( "Vec3sArray", ID_VEC3S_ARRAY ); arrayTable.add( "Vec4sArray", ID_VEC4S_ARRAY ); + arrayTable.add( "Vec2usArray", ID_VEC2US_ARRAY ); + arrayTable.add( "Vec3usArray", ID_VEC3US_ARRAY ); + arrayTable.add( "Vec4usArray", ID_VEC4US_ARRAY ); arrayTable.add( "Vec2fArray", ID_VEC2_ARRAY ); arrayTable.add( "Vec3fArray", ID_VEC3_ARRAY ); arrayTable.add( "Vec4fArray", ID_VEC4_ARRAY ); diff --git a/src/osgDB/OutputStream.cpp b/src/osgDB/OutputStream.cpp index 7a3a67883..e43c9a2d8 100644 --- a/src/osgDB/OutputStream.cpp +++ b/src/osgDB/OutputStream.cpp @@ -81,6 +81,12 @@ OutputStream& OutputStream::operator<<( const osg::Vec3b& v ) OutputStream& OutputStream::operator<<( const osg::Vec4b& v ) { *this << v.x() << v.y() << v.z() << v.w(); return *this; } +OutputStream& OutputStream::operator<<( const osg::Vec2ub& v ) +{ *this << v.x() << v.y(); return *this; } + +OutputStream& OutputStream::operator<<( const osg::Vec3ub& v ) +{ *this << v.x() << v.y() << v.z(); return *this; } + OutputStream& OutputStream::operator<<( const osg::Vec4ub& v ) { *this << v.r() << v.g() << v.b() << v.a(); return *this; } @@ -93,6 +99,15 @@ OutputStream& OutputStream::operator<<( const osg::Vec3s& v ) OutputStream& OutputStream::operator<<( const osg::Vec4s& v ) { *this << v.x() << v.y() << v.z() << v.w(); return *this; } +OutputStream& OutputStream::operator<<( const osg::Vec2us& v ) +{ *this << v.x() << v.y(); return *this; } + +OutputStream& OutputStream::operator<<( const osg::Vec3us& v ) +{ *this << v.x() << v.y() << v.z(); return *this; } + +OutputStream& OutputStream::operator<<( const osg::Vec4us& v ) +{ *this << v.x() << v.y() << v.z() << v.w(); return *this; } + OutputStream& OutputStream::operator<<( const osg::Vec2f& v ) { *this << v.x() << v.y(); return *this; } @@ -227,6 +242,14 @@ void OutputStream::writeArray( const osg::Array* a ) *this << MAPPEE(ArrayType, ID_VEC4B_ARRAY); writeArrayImplementation( static_cast(a), a->getNumElements() ); break; + case osg::Array::Vec2ubArrayType: + *this << MAPPEE(ArrayType, ID_VEC2UB_ARRAY); + writeArrayImplementation( static_cast(a), a->getNumElements() ); + break; + case osg::Array::Vec3ubArrayType: + *this << MAPPEE(ArrayType, ID_VEC3UB_ARRAY); + writeArrayImplementation( static_cast(a), a->getNumElements() ); + break; case osg::Array::Vec4ubArrayType: *this << MAPPEE(ArrayType, ID_VEC4UB_ARRAY); writeArrayImplementation( static_cast(a), a->getNumElements() ); @@ -243,6 +266,18 @@ void OutputStream::writeArray( const osg::Array* a ) *this << MAPPEE(ArrayType, ID_VEC4S_ARRAY); writeArrayImplementation( static_cast(a), a->getNumElements() ); break; + case osg::Array::Vec2usArrayType: + *this << MAPPEE(ArrayType, ID_VEC2US_ARRAY); + writeArrayImplementation( static_cast(a), a->getNumElements() ); + break; + case osg::Array::Vec3usArrayType: + *this << MAPPEE(ArrayType, ID_VEC3US_ARRAY); + writeArrayImplementation( static_cast(a), a->getNumElements() ); + break; + case osg::Array::Vec4usArrayType: + *this << MAPPEE(ArrayType, ID_VEC4US_ARRAY); + writeArrayImplementation( static_cast(a), a->getNumElements() ); + break; case osg::Array::Vec2ArrayType: *this << MAPPEE(ArrayType, ID_VEC2_ARRAY); writeArrayImplementation( static_cast(a), a->getNumElements() );