From 0399795d42e12fd2bf65a9910a406804ba2ed5a4 Mon Sep 17 00:00:00 2001 From: Erik Broberg Date: Thu, 7 Jul 2016 17:17:12 -0400 Subject: [PATCH] Prevent program crash when unable to open dataset --- modules/globebrowsing/tile/tiledataset.cpp | 2 +- modules/globebrowsing/tile/tiledataset.h | 4 +--- modules/globebrowsing/tile/tileproviderfactory.cpp | 14 +++++++++++++- 3 files changed, 15 insertions(+), 5 deletions(-) diff --git a/modules/globebrowsing/tile/tiledataset.cpp b/modules/globebrowsing/tile/tiledataset.cpp index e10851a9cf..4563dadd09 100644 --- a/modules/globebrowsing/tile/tiledataset.cpp +++ b/modules/globebrowsing/tile/tiledataset.cpp @@ -210,7 +210,7 @@ namespace openspace { result->dimensions = glm::uvec3(io.write.region.numPixels, 1); result->nBytesImageData = io.write.totalNumBytes; - if (_doPreprocessing) { + if (_config.doPreProcessing) { result->preprocessData = preprocess(result, io.write.region); result->error = std::max(result->error, postProcessErrorCheck(result, io)); } diff --git a/modules/globebrowsing/tile/tiledataset.h b/modules/globebrowsing/tile/tiledataset.h index 0d078b19d9..f49c5b117f 100644 --- a/modules/globebrowsing/tile/tiledataset.h +++ b/modules/globebrowsing/tile/tiledataset.h @@ -121,7 +121,7 @@ namespace openspace { ////////////////////////////////////////////////////////////////////////////////// // Initialization // - //////////////////////////////////////////////////////////////////////////////////\ + ////////////////////////////////////////////////////////////////////////////////// void initialize(); void ensureInitialized(); @@ -181,8 +181,6 @@ namespace openspace { TileDepthTransform _depthTransform; TileDataLayout _dataLayout; - bool _doPreprocessing; - static bool GdalHasBeenInitialized; bool hasBeenInitialized; }; diff --git a/modules/globebrowsing/tile/tileproviderfactory.cpp b/modules/globebrowsing/tile/tileproviderfactory.cpp index d6a6c3f0fe..93dc9f9e06 100644 --- a/modules/globebrowsing/tile/tileproviderfactory.cpp +++ b/modules/globebrowsing/tile/tileproviderfactory.cpp @@ -62,7 +62,19 @@ namespace openspace { LERROR("Unknown type: " << type); return nullptr; } - return concreteFactoryIterator->second(desc, initData); + + std::shared_ptr tileProvider; + + try { + tileProvider = concreteFactoryIterator->second(desc, initData); + } + catch (const std::exception& e) { + LERROR(e.what()); + } + catch (...) { + LERROR("Could not open dataset:\n" << desc << "\n"); + } + return tileProvider; } void TileProviderFactory::initialize() {