Added use ObjectWrapper's FinishObjectReadCallback to fix VertexBufferObject handling in osg::Geometry

and a call to the TileLoaded callback in osgTerrain.
This commit is contained in:
Robert Osfield
2010-10-28 14:04:57 +00:00
parent f1b660997b
commit 1b2c689122
2 changed files with 24 additions and 15 deletions

View File

@@ -97,6 +97,19 @@ ADD_ARRAYDATA_FUNCTIONS( FogCoordData )
ADD_ARRAYLIST_FUNCTIONS( TexCoordData, TexCoordArrayList )
ADD_ARRAYLIST_FUNCTIONS( VertexAttribData, VertexAttribArrayList )
struct GeometryFinishedObjectReadCallback : public osgDB::FinishedObjectReadCallback
{
virtual void objectRead(osgDB::InputStream&, osg::Object& obj)
{
osg::Geometry& geometry = static_cast<osg::Geometry&>(obj);
if (geometry.getUseVertexBufferObjects())
{
geometry.setUseVertexBufferObjects(false);
geometry.setUseVertexBufferObjects(true);
}
}
};
REGISTER_OBJECT_WRAPPER( Geometry,
new osg::Geometry,
osg::Geometry,
@@ -112,4 +125,6 @@ REGISTER_OBJECT_WRAPPER( Geometry,
ADD_USER_SERIALIZER( VertexAttribData ); // _vertexAttribList
ADD_BOOL_SERIALIZER( FastPathHint, true ); // _fastPathHint
//ADD_OBJECT_SERIALIZER( InternalOptimizedGeometry, osg::Geometry, NULL ); // _internalOptimizedGeometry
wrapper->addFinishedObjectReadCallback( new GeometryFinishedObjectReadCallback() );
}

View File

@@ -60,22 +60,16 @@ static bool writeColorLayers( osgDB::OutputStream& os, const osgTerrain::Terrain
return true;
}
// TileLoadedCallback
static bool checkTileLoadedCallback( const osgTerrain::TerrainTile& tile )
{ return true; }
static bool readTileLoadedCallback( osgDB::InputStream& is, osgTerrain::TerrainTile& tile )
struct TerrainTileFinishedObjectReadCallback : public osgDB::FinishedObjectReadCallback
{
if ( osgTerrain::TerrainTile::getTileLoadedCallback().valid() )
osgTerrain::TerrainTile::getTileLoadedCallback()->loaded( &tile, is.getOptions() );
return true;
}
virtual void objectRead(osgDB::InputStream& is, osg::Object& obj)
{
osgTerrain::TerrainTile& tile = static_cast<osgTerrain::TerrainTile&>(obj);
if ( osgTerrain::TerrainTile::getTileLoadedCallback().valid() )
osgTerrain::TerrainTile::getTileLoadedCallback()->loaded( &tile, is.getOptions() );
}
};
static bool writeTileLoadedCallback( osgDB::OutputStream& os, const osgTerrain::TerrainTile& tile )
{
os<<std::endl;
return true;
}
REGISTER_OBJECT_WRAPPER( osgTerrain_TerrainTile,
new osgTerrain::TerrainTile,
@@ -96,5 +90,5 @@ REGISTER_OBJECT_WRAPPER( osgTerrain_TerrainTile,
ADD_ENUM_VALUE( ENABLE_BLENDING_WHEN_ALPHA_PRESENT );
END_ENUM_SERIALIZER(); // BlendingPolicy
ADD_USER_SERIALIZER( TileLoadedCallback );
wrapper->addFinishedObjectReadCallback( new TerrainTileFinishedObjectReadCallback() );
}