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:
parent
5feb9e58f7
commit
2761bca496
@ -169,16 +169,37 @@ StateSetContent FbxMaterialToOsgStateSet::convert(const FbxSurfaceMaterial* pFbx
|
||||
|
||||
osg::ref_ptr<osg::Texture2D> FbxMaterialToOsgStateSet::fbxTextureToOsgTexture(const FbxFileTexture* fbx)
|
||||
{
|
||||
// Try to find image in cache
|
||||
ImageMap::iterator it = _imageMap.find(fbx->GetFileName());
|
||||
if (it != _imageMap.end())
|
||||
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
|
||||
// fbx->GetFileName() is as stored initially in the FBX
|
||||
if ((pImage = osgDB::readRefImageFile(osgDB::concatPaths(_dir, fbx->GetFileName()), _options)) || // 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"
|
||||
if (osgDB::fileExists(osgDB::concatPaths(_dir, fbx->GetFileName()))) // First try "export 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;
|
||||
pOsgTex->setImage(pImage.get());
|
||||
|
Loading…
Reference in New Issue
Block a user