Report errors on TileDetails callback failures
This callback can do out of memory and other failures, so catch those and report them.
This commit is contained in:
parent
2478bee97f
commit
1d59135652
@ -36,6 +36,7 @@
|
||||
#include <simgear/scene/util/SGReaderWriterOptions.hxx>
|
||||
#include <simgear/scene/util/OptionsReadFileCallback.hxx>
|
||||
#include <simgear/scene/util/SGNodeMasks.hxx>
|
||||
#include <simgear/debug/ErrorReportingCallback.hxx>
|
||||
|
||||
#include "SGNodeTriangles.hxx"
|
||||
#include "GroundLightManager.hxx"
|
||||
@ -53,6 +54,8 @@ typedef std::list<SGDirectionalLightBin> SGDirectionalLightListBin;
|
||||
|
||||
using namespace simgear;
|
||||
|
||||
using ReadResult = osgDB::ReaderWriter::ReadResult;
|
||||
|
||||
// QuadTreeBuilder is used by Random Objects Generator
|
||||
typedef std::pair<osg::Node*, int> ModelLOD;
|
||||
struct MakeQuadLeaf {
|
||||
@ -92,13 +95,16 @@ public:
|
||||
SG_LOG( SG_TERRAIN, SG_DEBUG, "SGTileDetailsCallback::~SGTileDetailsCallback() num cbs left " << num_tdcb );
|
||||
}
|
||||
|
||||
virtual osgDB::ReaderWriter::ReadResult readNode(
|
||||
const std::string&, const osgDB::Options*)
|
||||
ReadResult readNode(const std::string&, const osgDB::Options*) override
|
||||
{
|
||||
osg::ref_ptr<osg::Group> group;
|
||||
simgear::ErrorReportContext ec{"btg", _path};
|
||||
|
||||
try {
|
||||
group = new osg::Group;
|
||||
SGMaterialLibPtr matlib;
|
||||
osg::ref_ptr<SGMaterialCache> matcache;
|
||||
|
||||
osg::ref_ptr<osg::Group> group = new osg::Group;
|
||||
group->setDataVariance(osg::Object::STATIC);
|
||||
|
||||
// generate textured triangle list
|
||||
@ -129,6 +135,16 @@ public:
|
||||
if (objectLOD) {
|
||||
group->addChild(objectLOD);
|
||||
}
|
||||
} catch (sg_exception& sge) {
|
||||
simgear::reportFailure(simgear::LoadFailure::BadData, simgear::ErrorCode::BTGLoad,
|
||||
"Failed to load BTG file:" + sge.getFormattedMessage(),
|
||||
sge.getLocation());
|
||||
return ReadResult::ERROR_IN_READING_FILE;
|
||||
} catch (std::bad_alloc &e) {
|
||||
simgear::reportFailure(simgear::LoadFailure::OutOfMemory, simgear::ErrorCode::BTGLoad,
|
||||
"Out of memory loading tile details", sg_location{_path});
|
||||
return ReadResult::INSUFFICIENT_MEMORY_TO_LOAD;
|
||||
}
|
||||
|
||||
return group.release();
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user