Added version checks for when writing out new 64bit object sizes

This commit is contained in:
Robert Osfield
2017-06-19 15:45:35 +01:00
parent 605b3619cd
commit 83d08b18f8

View File

@@ -88,22 +88,45 @@ public:
{
if ( _supportBinaryBrackets )
{
if ( mark._name=="{" )
if (getOutputStream() && getOutputStream()->getFileVersion() > 148)
{
uint64_t size = 0;
_beginPositions.push_back( _out->tellp() );
_out->write( (char*)&size, osgDB::INT64_SIZE );
}
else if ( mark._name=="}" && _beginPositions.size()>0 )
{
std::streampos pos = _out->tellp(), beginPos = _beginPositions.back();
_beginPositions.pop_back();
_out->seekp( beginPos );
if ( mark._name=="{" )
{
uint64_t size = 0;
_beginPositions.push_back( _out->tellp() );
_out->write( (char*)&size, osgDB::INT64_SIZE );
}
else if ( mark._name=="}" && _beginPositions.size()>0 )
{
std::streampos pos = _out->tellp(), beginPos = _beginPositions.back();
_beginPositions.pop_back();
_out->seekp( beginPos );
std::streampos size64 = pos - beginPos;
uint64_t size = (uint64_t) size64;
_out->write( (char*)&size, osgDB::INT64_SIZE);
_out->seekp( pos );
std::streampos size64 = pos - beginPos;
uint64_t size = (uint64_t) size64;
_out->write( (char*)&size, osgDB::INT64_SIZE);
_out->seekp( pos );
}
}
else
{
if ( mark._name=="{" )
{
int size = 0;
_beginPositions.push_back( _out->tellp() );
_out->write( (char*)&size, osgDB::INT_SIZE );
}
else if ( mark._name=="}" && _beginPositions.size()>0 )
{
std::streampos pos = _out->tellp(), beginPos = _beginPositions.back();
_beginPositions.pop_back();
_out->seekp( beginPos );
std::streampos size64 = pos - beginPos;
int size = (int) size64;
_out->write( (char*)&size, osgDB::INT_SIZE);
_out->seekp( pos );
}
}
}
}