From b7ccf3f377775df18a0e55c2194c277a13796659 Mon Sep 17 00:00:00 2001 From: Robert Osfield Date: Thu, 7 Feb 2013 11:10:24 +0000 Subject: [PATCH] From Lukasz Izdebski , "I added write and read numInstances in PrimitiveSet." --- src/osgDB/InputStream.cpp | 10 ++++++++++ src/osgDB/OutputStream.cpp | 10 +++++----- 2 files changed, 15 insertions(+), 5 deletions(-) diff --git a/src/osgDB/InputStream.cpp b/src/osgDB/InputStream.cpp index 81cf98761..bf0184cba 100644 --- a/src/osgDB/InputStream.cpp +++ b/src/osgDB/InputStream.cpp @@ -403,7 +403,12 @@ osg::PrimitiveSet* InputStream::readPrimitiveSet() DEF_MAPPEE(PrimitiveType, type); DEF_MAPPEE(PrimitiveType, mode); + unsigned int numInstances = 0u; *this >> type >> mode; + if ( _fileVersion>96 ) + { + *this >> numInstances; + } switch ( type.get() ) { @@ -413,6 +418,7 @@ osg::PrimitiveSet* InputStream::readPrimitiveSet() *this >> first >> count; osg::DrawArrays* da = new osg::DrawArrays( mode.get(), first, count ); primitive = da; + primitive->setNumInstances( numInstances ); } break; case ID_DRAWARRAY_LENGTH: @@ -427,6 +433,7 @@ osg::PrimitiveSet* InputStream::readPrimitiveSet() } *this >> END_BRACKET; primitive = dl; + primitive->setNumInstances( numInstances ); } break; case ID_DRAWELEMENTS_UBYTE: @@ -441,6 +448,7 @@ osg::PrimitiveSet* InputStream::readPrimitiveSet() } *this >> END_BRACKET; primitive = de; + primitive->setNumInstances( numInstances ); } break; case ID_DRAWELEMENTS_USHORT: @@ -455,6 +463,7 @@ osg::PrimitiveSet* InputStream::readPrimitiveSet() } *this >> END_BRACKET; primitive = de; + primitive->setNumInstances( numInstances ); } break; case ID_DRAWELEMENTS_UINT: @@ -469,6 +478,7 @@ osg::PrimitiveSet* InputStream::readPrimitiveSet() } *this >> END_BRACKET; primitive = de; + primitive->setNumInstances( numInstances ); } break; default: diff --git a/src/osgDB/OutputStream.cpp b/src/osgDB/OutputStream.cpp index 32407e6cc..b7b2ab004 100644 --- a/src/osgDB/OutputStream.cpp +++ b/src/osgDB/OutputStream.cpp @@ -261,7 +261,7 @@ void OutputStream::writePrimitiveSet( const osg::PrimitiveSet* p ) *this << MAPPEE(PrimitiveType, ID_DRAWARRAYS); { const osg::DrawArrays* da = static_cast(p); - *this << MAPPEE(PrimitiveType, da->getMode()) + *this << MAPPEE(PrimitiveType, da->getMode()) << da->getNumInstances() << da->getFirst() << da->getCount() << std::endl; } break; @@ -269,7 +269,7 @@ void OutputStream::writePrimitiveSet( const osg::PrimitiveSet* p ) *this << MAPPEE(PrimitiveType, ID_DRAWARRAY_LENGTH); { const osg::DrawArrayLengths* dl = static_cast(p); - *this << MAPPEE(PrimitiveType, dl->getMode()) << dl->getFirst(); + *this << MAPPEE(PrimitiveType, dl->getMode()) << dl->getNumInstances() << dl->getFirst(); writeArrayImplementation( dl, dl->size(), 4 ); } break; @@ -277,7 +277,7 @@ void OutputStream::writePrimitiveSet( const osg::PrimitiveSet* p ) *this << MAPPEE(PrimitiveType, ID_DRAWELEMENTS_UBYTE); { const osg::DrawElementsUByte* de = static_cast(p); - *this << MAPPEE(PrimitiveType, de->getMode()); + *this << MAPPEE(PrimitiveType, de->getMode()) << de->getNumInstances(); writeArrayImplementation( de, de->size(), 4 ); } break; @@ -285,7 +285,7 @@ void OutputStream::writePrimitiveSet( const osg::PrimitiveSet* p ) *this << MAPPEE(PrimitiveType, ID_DRAWELEMENTS_USHORT); { const osg::DrawElementsUShort* de = static_cast(p); - *this << MAPPEE(PrimitiveType, de->getMode()); + *this << MAPPEE(PrimitiveType, de->getMode()) << de->getNumInstances(); writeArrayImplementation( de, de->size(), 4 ); } break; @@ -293,7 +293,7 @@ void OutputStream::writePrimitiveSet( const osg::PrimitiveSet* p ) *this << MAPPEE(PrimitiveType, ID_DRAWELEMENTS_UINT); { const osg::DrawElementsUInt* de = static_cast(p); - *this << MAPPEE(PrimitiveType, de->getMode()); + *this << MAPPEE(PrimitiveType, de->getMode()) << de->getNumInstances(); writeArrayImplementation( de, de->size(), 4 ); } break;