From 24ecfb1a487d087488ab8a9950e654faabd613fd Mon Sep 17 00:00:00 2001 From: Robert Osfield Date: Wed, 11 Sep 2013 15:44:08 +0000 Subject: [PATCH] Added access methods to Serializer to help with using wrappers for other purposes such as script integration. Added Vec*i and Vec*ui support to serializers --- include/osgDB/DataTypes | 7 +++++ include/osgDB/ObjectWrapper | 9 ++++-- include/osgDB/Serializer | 8 ++++- src/osgDB/InputStream.cpp | 45 ++++++++++++++++++++++++++++ src/osgDB/ObjectWrapper.cpp | 7 +++++ src/osgDB/OutputStream.cpp | 58 +++++++++++++++++++++++++++++++++++++ 6 files changed, 130 insertions(+), 4 deletions(-) diff --git a/include/osgDB/DataTypes b/include/osgDB/DataTypes index 942530504..db8a70cd2 100644 --- a/include/osgDB/DataTypes +++ b/include/osgDB/DataTypes @@ -64,6 +64,13 @@ const int ID_VEC2US_ARRAY = 23; const int ID_VEC3US_ARRAY = 24; const int ID_VEC4US_ARRAY = 25; +const int ID_VEC2I_ARRAY = 26; +const int ID_VEC3I_ARRAY = 27; +const int ID_VEC4I_ARRAY = 28; +const int ID_VEC2UI_ARRAY = 29; +const int ID_VEC3UI_ARRAY = 30; +const int ID_VEC4UI_ARRAY = 31; + const int ID_DRAWARRAYS = 50; const int ID_DRAWARRAY_LENGTH = 51; const int ID_DRAWELEMENTS_UBYTE = 52; diff --git a/include/osgDB/ObjectWrapper b/include/osgDB/ObjectWrapper index d43c5aa73..063962160 100644 --- a/include/osgDB/ObjectWrapper +++ b/include/osgDB/ObjectWrapper @@ -93,14 +93,14 @@ struct UpdateWrapperVersionProxy UpdateWrapperVersionProxy( ObjectWrapper* w, int v ): _wrapper(w) { _lastVersion = w->getUpdatedVersion(); - w->setUpdatedVersion(v); + w->setUpdatedVersion(v); } - + ~UpdateWrapperVersionProxy() { _wrapper->setUpdatedVersion(_lastVersion); } - + ObjectWrapper* _wrapper; int _lastVersion; }; @@ -133,6 +133,9 @@ public: IntLookup::Value getValue( const std::string& group, const std::string& str ) { return findLookup(group).getValue(str.c_str()); } const std::string& getString( const std::string& group, IntLookup::Value value ) { return findLookup(group).getString(value); } + IntLookupMap& getLookupMap() { return _globalMap; } + const IntLookupMap& getLookupMap() const { return _globalMap; } + protected: friend class osgDB::Registry; diff --git a/include/osgDB/Serializer b/include/osgDB/Serializer index c1db37223..5838f7bc3 100644 --- a/include/osgDB/Serializer +++ b/include/osgDB/Serializer @@ -82,6 +82,12 @@ public: return itr->second; } + StringToValue& getStringToValue() { return _stringToValue; } + const StringToValue& getStringToValue() const { return _stringToValue; } + + ValueToString& getValueToString() { return _valueToString; } + const ValueToString& getValueToString() const { return _valueToString; } + protected: StringToValue _stringToValue; ValueToString _valueToString; @@ -127,7 +133,7 @@ public: RW_MATRIXF, RW_MATRIXD, RW_MATRIX, RW_GLENUM, RW_STRING, RW_ENUM, 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 + RW_VEC4B, RW_VEC4UB, RW_VEC4S, RW_VEC4US, RW_VEC4I, RW_VEC4UI }; BaseSerializer() : _firstVersion(0), _lastVersion(INT_MAX) {} diff --git a/src/osgDB/InputStream.cpp b/src/osgDB/InputStream.cpp index e30c95e3a..c9e2ef462 100644 --- a/src/osgDB/InputStream.cpp +++ b/src/osgDB/InputStream.cpp @@ -488,6 +488,51 @@ osg::Array* InputStream::readArray() array = va; } break; + + case ID_VEC2I_ARRAY: + { + osg::Vec2iArray* va = new osg::Vec2iArray; + readArrayImplementation( va, 2, INT_SIZE ); + array = va; + } + break; + case ID_VEC3I_ARRAY: + { + osg::Vec3iArray* va = new osg::Vec3iArray; + readArrayImplementation( va, 3, INT_SIZE ); + array = va; + } + break; + case ID_VEC4I_ARRAY: + { + osg::Vec4iArray* va = new osg::Vec4iArray; + readArrayImplementation( va, 4, INT_SIZE ); + array = va; + } + break; + + case ID_VEC2UI_ARRAY: + { + osg::Vec2uiArray* va = new osg::Vec2uiArray; + readArrayImplementation( va, 2, INT_SIZE ); + array = va; + } + break; + case ID_VEC3UI_ARRAY: + { + osg::Vec3uiArray* va = new osg::Vec3uiArray; + readArrayImplementation( va, 3, INT_SIZE ); + array = va; + } + break; + case ID_VEC4UI_ARRAY: + { + osg::Vec4uiArray* va = new osg::Vec4uiArray; + readArrayImplementation( va, 4, INT_SIZE ); + array = va; + } + break; + default: throwException( "InputStream::readArray(): Unsupported array type." ); } diff --git a/src/osgDB/ObjectWrapper.cpp b/src/osgDB/ObjectWrapper.cpp index 7973bade1..d9a7715ed 100644 --- a/src/osgDB/ObjectWrapper.cpp +++ b/src/osgDB/ObjectWrapper.cpp @@ -535,6 +535,13 @@ ObjectWrapperManager::ObjectWrapperManager() arrayTable.add( "Vec3dArray", ID_VEC3D_ARRAY ); arrayTable.add( "Vec4dArray", ID_VEC4D_ARRAY ); + arrayTable.add( "Vec2iArray", ID_VEC2I_ARRAY ); + arrayTable.add( "Vec3iArray", ID_VEC3I_ARRAY ); + arrayTable.add( "Vec4iArray", ID_VEC4I_ARRAY ); + arrayTable.add( "Vec2uiArray", ID_VEC2UI_ARRAY ); + arrayTable.add( "Vec3uiArray", ID_VEC3UI_ARRAY ); + arrayTable.add( "Vec4uiArray", ID_VEC4UI_ARRAY ); + IntLookup& primitiveTable = _globalMap["PrimitiveType"]; primitiveTable.add( "DrawArrays", ID_DRAWARRAYS ); diff --git a/src/osgDB/OutputStream.cpp b/src/osgDB/OutputStream.cpp index 9d9d8c993..93dbafa2e 100644 --- a/src/osgDB/OutputStream.cpp +++ b/src/osgDB/OutputStream.cpp @@ -82,6 +82,7 @@ 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; } @@ -91,6 +92,7 @@ OutputStream& OutputStream::operator<<( const osg::Vec3ub& v ) OutputStream& OutputStream::operator<<( const osg::Vec4ub& v ) { *this << v.r() << v.g() << v.b() << v.a(); return *this; } + OutputStream& OutputStream::operator<<( const osg::Vec2s& v ) { *this << v.x() << v.y(); return *this; } @@ -100,6 +102,7 @@ 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; } @@ -109,6 +112,7 @@ OutputStream& OutputStream::operator<<( const osg::Vec3us& v ) 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; } @@ -118,6 +122,7 @@ OutputStream& OutputStream::operator<<( const osg::Vec3f& v ) OutputStream& OutputStream::operator<<( const osg::Vec4f& v ) { *this << v.x() << v.y() << v.z() << v.w(); return *this; } + OutputStream& OutputStream::operator<<( const osg::Vec2d& v ) { *this << v.x() << v.y(); return *this; } @@ -127,6 +132,27 @@ OutputStream& OutputStream::operator<<( const osg::Vec3d& v ) OutputStream& OutputStream::operator<<( const osg::Vec4d& v ) { *this << v.x() << v.y() << v.z() << v.w(); return *this; } + +OutputStream& OutputStream::operator<<( const osg::Vec2i& v ) +{ *this << v.x() << v.y(); return *this; } + +OutputStream& OutputStream::operator<<( const osg::Vec3i& v ) +{ *this << v.x() << v.y() << v.z(); return *this; } + +OutputStream& OutputStream::operator<<( const osg::Vec4i& v ) +{ *this << v.x() << v.y() << v.z() << v.w(); return *this; } + + +OutputStream& OutputStream::operator<<( const osg::Vec2ui& v ) +{ *this << v.x() << v.y(); return *this; } + +OutputStream& OutputStream::operator<<( const osg::Vec3ui& v ) +{ *this << v.x() << v.y() << v.z(); return *this; } + +OutputStream& OutputStream::operator<<( const osg::Vec4ui& v ) +{ *this << v.x() << v.y() << v.z() << v.w(); return *this; } + + OutputStream& OutputStream::operator<<( const osg::Quat& q ) { *this << q.x() << q.y() << q.z() << q.w(); return *this; } @@ -231,6 +257,7 @@ void OutputStream::writeArray( const osg::Array* a ) *this << MAPPEE(ArrayType, ID_DOUBLE_ARRAY); writeArrayImplementation( static_cast(a), a->getNumElements(), 4 ); break; + case osg::Array::Vec2bArrayType: *this << MAPPEE(ArrayType, ID_VEC2B_ARRAY); writeArrayImplementation( static_cast(a), a->getNumElements() ); @@ -243,6 +270,7 @@ 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() ); @@ -255,6 +283,7 @@ void OutputStream::writeArray( const osg::Array* a ) *this << MAPPEE(ArrayType, ID_VEC4UB_ARRAY); writeArrayImplementation( static_cast(a), a->getNumElements() ); break; + case osg::Array::Vec2sArrayType: *this << MAPPEE(ArrayType, ID_VEC2S_ARRAY); writeArrayImplementation( static_cast(a), a->getNumElements() ); @@ -267,6 +296,7 @@ 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() ); @@ -279,6 +309,7 @@ void OutputStream::writeArray( const osg::Array* a ) *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() ); @@ -291,6 +322,7 @@ void OutputStream::writeArray( const osg::Array* a ) *this << MAPPEE(ArrayType, ID_VEC4_ARRAY); writeArrayImplementation( static_cast(a), a->getNumElements() ); break; + case osg::Array::Vec2dArrayType: *this << MAPPEE(ArrayType, ID_VEC2D_ARRAY); writeArrayImplementation( static_cast(a), a->getNumElements() ); @@ -303,6 +335,32 @@ void OutputStream::writeArray( const osg::Array* a ) *this << MAPPEE(ArrayType, ID_VEC4D_ARRAY); writeArrayImplementation( static_cast(a), a->getNumElements() ); break; + + case osg::Array::Vec2iArrayType: + *this << MAPPEE(ArrayType, ID_VEC2I_ARRAY); + writeArrayImplementation( static_cast(a), a->getNumElements() ); + break; + case osg::Array::Vec3iArrayType: + *this << MAPPEE(ArrayType, ID_VEC3I_ARRAY); + writeArrayImplementation( static_cast(a), a->getNumElements() ); + break; + case osg::Array::Vec4iArrayType: + *this << MAPPEE(ArrayType, ID_VEC4I_ARRAY); + writeArrayImplementation( static_cast(a), a->getNumElements() ); + break; + + case osg::Array::Vec2uiArrayType: + *this << MAPPEE(ArrayType, ID_VEC2UI_ARRAY); + writeArrayImplementation( static_cast(a), a->getNumElements() ); + break; + case osg::Array::Vec3uiArrayType: + *this << MAPPEE(ArrayType, ID_VEC3UI_ARRAY); + writeArrayImplementation( static_cast(a), a->getNumElements() ); + break; + case osg::Array::Vec4uiArrayType: + *this << MAPPEE(ArrayType, ID_VEC4UI_ARRAY); + writeArrayImplementation( static_cast(a), a->getNumElements() ); + break; default: throwException( "OutputStream::writeArray(): Unsupported array type." ); }