Files
OpenSceneGraph/src/osgWrappers/serializers/osg/ShaderBinary.cpp
2016-06-20 12:20:44 +01:00

65 lines
1.5 KiB
C++

#include <osg/Shader>
#include <osgDB/ObjectWrapper>
#include <osgDB/Serializer>
static bool checkData( const osg::ShaderBinary& sb )
{
return sb.getSize()>0;
}
static bool readData( osgDB::InputStream& is, osg::ShaderBinary& sb )
{
unsigned int size; is >> size;
char* data = new char[size]();
if ( is.isBinary() )
{
is.readCharArray( data, size );
}
else
{
is >> is.BEGIN_BRACKET;
for ( unsigned int i=0; i<size; ++i )
{
is >> std::hex >> data[i] >> std::dec;
}
is >> is.END_BRACKET;
}
if (size>0)
{
sb.assign( size, (unsigned char*)data );
}
delete [] data;
return true;
}
static bool writeData( osgDB::OutputStream& os, const osg::ShaderBinary& sb )
{
if ( os.isBinary() )
{
os << (unsigned int)sb.getSize();
os.writeCharArray( (char*)sb.getData(), sb.getSize() );
}
else
{
const unsigned char* data = sb.getData();
os << (unsigned int)sb.getSize();
os << os.BEGIN_BRACKET << std::endl;
for ( unsigned int i=0; i<sb.getSize(); ++i )
{
os << std::hex << data[i] << std::dec << std::endl;
}
os << os.END_BRACKET << std::endl;
}
return true;
}
REGISTER_OBJECT_WRAPPER( ShaderBinary,
new osg::ShaderBinary,
osg::ShaderBinary,
"osg::Object osg::ShaderBinary" )
{
ADD_USER_SERIALIZER( Data ); // _data
}