Introduced TerrainTile::TileLoadedCallback

This commit is contained in:
Robert Osfield
2008-09-10 18:11:54 +00:00
parent ed4bd41574
commit b4b5b5ea41
8 changed files with 82 additions and 10 deletions

View File

@@ -1007,7 +1007,7 @@ osg::Image* DataInputStream::readImage(IncludeImageMode mode)
// Only read image name from stream.
{
std::string filename = readString();
if(filename.compare("")!=0){
if(!filename.empty()){
return readImage(filename);
}
}

View File

@@ -15,6 +15,8 @@
#include "ImageLayer.h"
#include "Layer.h"
#include <osgTerrain/TerrainTile>
#include <osgDB/ReadFile>
using namespace ive;
@@ -59,8 +61,18 @@ void ImageLayer::read(DataInputStream* in)
throw Exception("ImageLayer::read(): Could not cast this osgLayer::Layer to an osg::Group.");
bool deferExternalLayerLoading = osgTerrain::TerrainTile::getTileLoadedCallback().valid() ?
osgTerrain::TerrainTile::getTileLoadedCallback()->deferExternalLayerLoading() : false;
// Should we read image data from stream
IncludeImageMode includeImg = (IncludeImageMode)in->readChar();
setImage(in->readImage(includeImg));
if (includeImg==IMAGE_REFERENCE_FILE && deferExternalLayerLoading)
{
setFileName(in->readString());
}
else
{
setImage(in->readImage(includeImg));
}
}

View File

@@ -66,7 +66,7 @@ void TerrainTile::write(DataOutputStream* out)
}
writeTerrainTechnique(out, getTerrainTechnique());
}
void TerrainTile::read(DataInputStream* in)
@@ -119,6 +119,8 @@ void TerrainTile::read(DataInputStream* in)
setTerrainTechnique(readTerrainTechnique(in));
if (osgTerrain::TerrainTile::getTileLoadedCallback().valid())
osgTerrain::TerrainTile::getTileLoadedCallback()->loaded(this, in->getOptions());
}
void TerrainTile::writeTerrainTechnique(DataOutputStream* out, osgTerrain::TerrainTechnique* technique)

View File

@@ -13,6 +13,8 @@
#include <osgDB/Output>
#include <osgDB/ParameterOutput>
#include <osgTerrain/TerrainTile>
bool ImageLayer_readLocalData(osg::Object &obj, osgDB::Input &fr);
bool ImageLayer_writeLocalData(const osg::Object &obj, osgDB::Output &fw);
@@ -36,11 +38,18 @@ bool ImageLayer_readLocalData(osg::Object& obj, osgDB::Input &fr)
std::string filename = fr[1].getStr();
if (!filename.empty())
{
osg::ref_ptr<osg::Image> image = fr.readImage(filename.c_str());
if (image.valid())
bool deferExternalLayerLoading = osgTerrain::TerrainTile::getTileLoadedCallback().valid() ?
osgTerrain::TerrainTile::getTileLoadedCallback()->deferExternalLayerLoading() : false;
layer.setFileName(filename);
if (!deferExternalLayerLoading)
{
layer.setFileName(filename);
layer.setImage(image.get());
osg::ref_ptr<osg::Image> image = fr.readImage(filename.c_str());
if (image.valid())
{
layer.setImage(image.get());
}
}
}

View File

@@ -267,6 +267,9 @@ bool TerrainTile_readLocalData(osg::Object& obj, osgDB::Input &fr)
}
if (osgTerrain::TerrainTile::getTileLoadedCallback().valid())
osgTerrain::TerrainTile::getTileLoadedCallback()->loaded(&terrainTile, fr.getOptions());
return itrAdvanced;
}

View File

@@ -19,6 +19,17 @@
using namespace osg;
using namespace osgTerrain;
void TerrainTile::setTileLoadedCallback(TerrainTile::TileLoadedCallback* lc)
{
getTileLoadedCallback() = lc;
}
osg::ref_ptr<TerrainTile::TileLoadedCallback>& TerrainTile::getTileLoadedCallback()
{
static osg::ref_ptr<TileLoadedCallback> s_TileLoadedCallback;
return s_TileLoadedCallback;
}
TerrainTile::TerrainTile():
_terrain(0),
_hasBeenTraversal(false),