Introduced TerrainTile::TileLoadedCallback
This commit is contained in:
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
|
||||
@@ -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),
|
||||
|
||||
Reference in New Issue
Block a user