#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.").
This commit is contained in:
ThorstenB
2011-06-26 00:36:19 +02:00
parent d36170879c
commit 8c8d9e5cc4
3 changed files with 29 additions and 6 deletions

View File

@@ -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);
}
}
}

View File

@@ -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");

View File

@@ -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<osg::Node> 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<SGReaderWriterXMLOptions> options;
options = new SGReaderWriterXMLOptions(*options_);
options->setPropRoot(prop_root);