From: ThorstenB Date: Sat, 25 Jun 2011 22:36:19 +0000 (+0200) Subject: #348: Missing model/texture files not reported properly X-Git-Url: https://git.mxchange.org/?a=commitdiff_plain;h=8c8d9e5cc452f6edab03c3ffbe9ff1d52aa96103;p=simgear.git #348: Missing model/texture files not reported properly Whenever resolving a (relative) path to an absolute path with 'findDataFile', check if the result is empty and report original (relative) path as missing. Otherwise no or a meaningless message is issued ("File '' not found."). --- diff --git a/simgear/scene/material/Effect.cxx b/simgear/scene/material/Effect.cxx index 6517bd23..33e272c1 100644 --- a/simgear/scene/material/Effect.cxx +++ b/simgear/scene/material/Effect.cxx @@ -724,10 +724,10 @@ void reload_shaders() { for(ShaderMap::iterator sitr = shaderMap.begin(); sitr != shaderMap.end(); ++sitr) { - Shader *shader = sitr->second.get(); + Shader *shader = sitr->second.get(); string fileName = SGModelLib::findDataFile(sitr->first.first); if (!fileName.empty()) { - shader->loadShaderSourceFromFile(fileName); + shader->loadShaderSourceFromFile(fileName); } } } diff --git a/simgear/scene/material/TextureBuilder.cxx b/simgear/scene/material/TextureBuilder.cxx index 797dae25..f53fe526 100644 --- a/simgear/scene/material/TextureBuilder.cxx +++ b/simgear/scene/material/TextureBuilder.cxx @@ -211,9 +211,17 @@ TexTuple makeTexTuple(Effect* effect, const SGPropertyNode* props, const SGPropertyNode* pImage = getEffectPropertyChild(effect, props, "image"); string imageName; + string absFileName; if (pImage) + { imageName = pImage->getStringValue(); - string absFileName = SGModelLib::findDataFile(imageName, options); + absFileName = SGModelLib::findDataFile(imageName, options); + if (absFileName.empty()) + { + SG_LOG(SG_INPUT, SG_ALERT, "Texture file not found: '" + << imageName << "'"); + } + } const SGPropertyNode* pMipmapControl = getEffectPropertyChild(effect, props, "mipmap-control"); diff --git a/simgear/scene/model/SGReaderWriterXML.cxx b/simgear/scene/model/SGReaderWriterXML.cxx index 0b5def18..b17c776a 100644 --- a/simgear/scene/model/SGReaderWriterXML.cxx +++ b/simgear/scene/model/SGReaderWriterXML.cxx @@ -245,9 +245,18 @@ sgLoad3DModel_internal(const SGPath& path, copyProperties(overlay, props); if (props->hasValue("/path")) { - modelpath = SGModelLib::findDataFile(props->getStringValue("/path"), NULL, modelDir); + string modelPathStr = props->getStringValue("/path"); + modelpath = SGModelLib::findDataFile(modelPathStr, NULL, modelDir); + if (modelpath.isNull()) + throw sg_io_exception("Model file not found: '" + modelPathStr + "'", + path.str()); + if (props->hasValue("/texture-path")) { - texturepath = SGModelLib::findDataFile(props->getStringValue("/texture-path"), NULL, modelDir); + string texturePathStr = props->getStringValue("/texture-path"); + texturepath = SGModelLib::findDataFile(texturePathStr, NULL, modelDir); + if (texturepath.isNull()) + throw sg_io_exception("Texture file not found: '" + texturePathStr + "'", + path.str()); } } else { model = new osg::Node; @@ -336,9 +345,15 @@ sgLoad3DModel_internal(const SGPath& path, SGPath submodelpath; osg::ref_ptr submodel; - SGPath submodelPath = SGModelLib::findDataFile(sub_props->getStringValue("path"), + string subPathStr = sub_props->getStringValue("path"); + SGPath submodelPath = SGModelLib::findDataFile(subPathStr, NULL, modelDir); + if (submodelPath.isNull()) { + SG_LOG(SG_INPUT, SG_ALERT, "Failed to load file: \"" << subPathStr << "\""); + continue; + } + osg::ref_ptr options; options = new SGReaderWriterXMLOptions(*options_); options->setPropRoot(prop_root);