#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:
@@ -724,10 +724,10 @@ void reload_shaders()
|
|||||||
{
|
{
|
||||||
for(ShaderMap::iterator sitr = shaderMap.begin(); sitr != shaderMap.end(); ++sitr)
|
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);
|
string fileName = SGModelLib::findDataFile(sitr->first.first);
|
||||||
if (!fileName.empty()) {
|
if (!fileName.empty()) {
|
||||||
shader->loadShaderSourceFromFile(fileName);
|
shader->loadShaderSourceFromFile(fileName);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -211,9 +211,17 @@ TexTuple makeTexTuple(Effect* effect, const SGPropertyNode* props,
|
|||||||
const SGPropertyNode* pImage
|
const SGPropertyNode* pImage
|
||||||
= getEffectPropertyChild(effect, props, "image");
|
= getEffectPropertyChild(effect, props, "image");
|
||||||
string imageName;
|
string imageName;
|
||||||
|
string absFileName;
|
||||||
if (pImage)
|
if (pImage)
|
||||||
|
{
|
||||||
imageName = pImage->getStringValue();
|
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
|
const SGPropertyNode* pMipmapControl
|
||||||
= getEffectPropertyChild(effect, props, "mipmap-control");
|
= getEffectPropertyChild(effect, props, "mipmap-control");
|
||||||
|
|||||||
@@ -245,9 +245,18 @@ sgLoad3DModel_internal(const SGPath& path,
|
|||||||
copyProperties(overlay, props);
|
copyProperties(overlay, props);
|
||||||
|
|
||||||
if (props->hasValue("/path")) {
|
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")) {
|
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 {
|
} else {
|
||||||
model = new osg::Node;
|
model = new osg::Node;
|
||||||
@@ -336,9 +345,15 @@ sgLoad3DModel_internal(const SGPath& path,
|
|||||||
SGPath submodelpath;
|
SGPath submodelpath;
|
||||||
osg::ref_ptr<osg::Node> submodel;
|
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);
|
NULL, modelDir);
|
||||||
|
|
||||||
|
if (submodelPath.isNull()) {
|
||||||
|
SG_LOG(SG_INPUT, SG_ALERT, "Failed to load file: \"" << subPathStr << "\"");
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
osg::ref_ptr<SGReaderWriterXMLOptions> options;
|
osg::ref_ptr<SGReaderWriterXMLOptions> options;
|
||||||
options = new SGReaderWriterXMLOptions(*options_);
|
options = new SGReaderWriterXMLOptions(*options_);
|
||||||
options->setPropRoot(prop_root);
|
options->setPropRoot(prop_root);
|
||||||
|
|||||||
Reference in New Issue
Block a user