Ver código fonte

Catch readTexture exceptions on CTextureCache::resolve so multi-background setups can properly lookup files...

This might need further improvements to use a texture cache by background instead of globally...

Signed-off-by: Alexis Maiquez <almamu@almamu.com>
Alexis Maiquez 3 anos atrás
pai
commit
0387ebc588
1 arquivos alterados com 24 adições e 11 exclusões
  1. 24 11
      src/WallpaperEngine/Render/CTextureCache.cpp

+ 24 - 11
src/WallpaperEngine/Render/CTextureCache.cpp

@@ -24,21 +24,34 @@ const ITexture* CTextureCache::resolve (const std::string& filename)
     // search for the texture in all the different containers just in case
     for (auto it : this->getContext ().getApp ().getBackgrounds ())
     {
-        const ITexture* texture = it.second->getContainer ()->readTexture (filename);
-
-        this->store (filename, texture);
-
-        return texture;
+        try
+        {
+            const ITexture* texture = it.second->getContainer ()->readTexture (filename);
+
+            this->store (filename, texture);
+
+            return texture;
+        }
+        catch (CAssetLoadException& ex)
+        {
+            // ignored, this happens if we're looking at the wrong background
+        }
     }
 
     if (this->getContext ().getApp ().getDefaultBackground () != nullptr)
     {
-        const ITexture* texture =
-            this->getContext ().getApp ().getDefaultBackground ()->getContainer ()->readTexture (filename);
-
-        this->store (filename, texture);
-
-        return texture;
+        try
+        {
+            const ITexture* texture = this->getContext ().getApp ().getDefaultBackground ()->getContainer ()->readTexture (filename);
+
+            this->store (filename, texture);
+
+            return texture;
+        }
+        catch (CAssetLoadException& ex)
+        {
+            // ignored, this happens if we're looking at the wrong background
+        }
     }
 
     throw CAssetLoadException (filename, "Cannot find file");