From Brad Christiansen, "Attached is a fix which implements the lazy loading of optional layers (if requested) in the new osgb/osgt formats."
This commit is contained in:
@@ -136,7 +136,7 @@ public:
|
||||
// Global reading functions
|
||||
osg::Array* readArray();
|
||||
osg::PrimitiveSet* readPrimitiveSet();
|
||||
osg::Image* readImage();
|
||||
osg::Image* readImage(bool readFromExternal=true);
|
||||
osg::Object* readObject( osg::Object* existingObj=0 );
|
||||
osg::Object* readObjectFields( const std::string& className, osg::Object* existingObj=0);
|
||||
|
||||
|
||||
@@ -476,8 +476,9 @@ osg::PrimitiveSet* InputStream::readPrimitiveSet()
|
||||
return primitive.release();
|
||||
}
|
||||
|
||||
osg::Image* InputStream::readImage()
|
||||
osg::Image* InputStream::readImage(bool readFromExternal)
|
||||
{
|
||||
|
||||
std::string className="osg::Image";
|
||||
unsigned int id = 0;
|
||||
|
||||
@@ -497,7 +498,7 @@ osg::Image* InputStream::readImage()
|
||||
if ( getException() ) return NULL;
|
||||
|
||||
osg::ref_ptr<osg::Image> image = NULL;
|
||||
bool readFromExternal = true;
|
||||
|
||||
switch ( decision )
|
||||
{
|
||||
case IMAGE_INLINE_DATA:
|
||||
|
||||
@@ -3,10 +3,49 @@
|
||||
#include <osgDB/InputStream>
|
||||
#include <osgDB/OutputStream>
|
||||
|
||||
#include <osgTerrain/TerrainTile>
|
||||
|
||||
|
||||
static bool checkImage( const osgTerrain::ImageLayer& im )
|
||||
{ return im.getImage() != NULL; }
|
||||
|
||||
static bool readImage( osgDB::InputStream& is, osgTerrain::ImageLayer& il )
|
||||
{
|
||||
|
||||
if(!is.isBinary()) is >> osgDB::BEGIN_BRACKET;
|
||||
|
||||
bool deferExternalLayerLoading = osgTerrain::TerrainTile::getTileLoadedCallback().valid() ?
|
||||
osgTerrain::TerrainTile::getTileLoadedCallback()->deferExternalLayerLoading() : false;
|
||||
|
||||
|
||||
osg::ref_ptr<osg::Image> image = is.readImage(!deferExternalLayerLoading);
|
||||
if (image.valid())
|
||||
{
|
||||
if(image->valid())
|
||||
{
|
||||
il.setImage(image.get());
|
||||
}
|
||||
}
|
||||
if(!is.isBinary()) is >> osgDB::END_BRACKET;
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
static bool writeImage( osgDB::OutputStream& os, const osgTerrain::ImageLayer& il )
|
||||
{
|
||||
const osg::Image* image = il.getImage();
|
||||
|
||||
if(!os.isBinary()) os << osgDB::BEGIN_BRACKET << std::endl;
|
||||
os.writeImage(image);
|
||||
if(!os.isBinary()) os << osgDB::END_BRACKET << std::endl;
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
REGISTER_OBJECT_WRAPPER( osgTerrain_ImageLayer,
|
||||
new osgTerrain::ImageLayer,
|
||||
osgTerrain::ImageLayer,
|
||||
"osg::Object osgTerrain::Layer osgTerrain::ImageLayer" )
|
||||
{
|
||||
ADD_IMAGE_SERIALIZER( Image, osg::Image, NULL ); // _image
|
||||
{
|
||||
ADD_USER_SERIALIZER( Image );
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user