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:
@@ -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() );
|
||||
}
|
||||
|
||||
@@ -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() );
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user