Check existence of path before reading image

When loading texture images inside the FBX plugin check that the path
exists before trying to read the image. This is done to avoid
unnecessary warnings inside the readRefImageFile function.
This commit is contained in:
Björn Blissing 2018-05-03 12:56:08 +02:00
parent 5feb9e58f7
commit 2761bca496

View File

@ -169,16 +169,37 @@ StateSetContent FbxMaterialToOsgStateSet::convert(const FbxSurfaceMaterial* pFbx
osg::ref_ptr<osg::Texture2D> FbxMaterialToOsgStateSet::fbxTextureToOsgTexture(const FbxFileTexture* fbx) osg::ref_ptr<osg::Texture2D> FbxMaterialToOsgStateSet::fbxTextureToOsgTexture(const FbxFileTexture* fbx)
{ {
// Try to find image in cache
ImageMap::iterator it = _imageMap.find(fbx->GetFileName()); ImageMap::iterator it = _imageMap.find(fbx->GetFileName());
if (it != _imageMap.end()) if (it != _imageMap.end())
return it->second; return it->second;
osg::ref_ptr<osg::Image> pImage = NULL;
// Try to locate valid filename
std::string filename = "";
// Warning: fbx->GetRelativeFileName() is relative TO EXECUTION DIR // Warning: fbx->GetRelativeFileName() is relative TO EXECUTION DIR
// fbx->GetFileName() is as stored initially in the FBX // fbx->GetFileName() is as stored initially in the FBX
if ((pImage = osgDB::readRefImageFile(osgDB::concatPaths(_dir, fbx->GetFileName()), _options)) || // First try "export dir/name" if (osgDB::fileExists(osgDB::concatPaths(_dir, fbx->GetFileName()))) // First try "export dir/name"
(pImage = osgDB::readRefImageFile(fbx->GetFileName(), _options)) || // Then try "name" (if absolute) {
(pImage = osgDB::readRefImageFile(osgDB::concatPaths(_dir, fbx->GetRelativeFileName()), _options))) // Else try "current dir/name" filename = osgDB::concatPaths(_dir, fbx->GetFileName());
}
else if (osgDB::fileExists(fbx->GetFileName())) // Then try "name" (if absolute)
{
filename = fbx->GetFileName();
}
else if (osgDB::fileExists(osgDB::concatPaths(_dir, fbx->GetRelativeFileName()))) // Else try "current dir/name"
{
filename = osgDB::concatPaths(_dir, fbx->GetRelativeFileName());
}
else
{
OSG_WARN << "Could not find valid file for " << fbx->GetFileName() << std::endl;
return NULL;
}
osg::ref_ptr<osg::Image> pImage = osgDB::readRefImageFile(filename, _options);
if (pImage.valid())
{ {
osg::ref_ptr<osg::Texture2D> pOsgTex = new osg::Texture2D; osg::ref_ptr<osg::Texture2D> pOsgTex = new osg::Texture2D;
pOsgTex->setImage(pImage.get()); pOsgTex->setImage(pImage.get());