If available, use local textures instead of those sent by server
authorPerttu Ahola <celeron55@gmail.com>
Sat, 26 Nov 2011 11:32:23 +0000 (13:32 +0200)
committerPerttu Ahola <celeron55@gmail.com>
Tue, 29 Nov 2011 17:13:53 +0000 (19:13 +0200)
src/tile.cpp

index f18086f41139033c2c4499d515079dd30e697d8d..f7d577b1fcab29f053b6a3143dfc3df32100b4c0 100644 (file)
@@ -183,18 +183,28 @@ class SourceImageCache
 {
 public:
        void insert(const std::string &name, video::IImage *img,
-                       bool do_overwrite)
+                       bool prefer_local, video::IVideoDriver *driver)
        {
                assert(img);
+               // Remove old image
                core::map<std::string, video::IImage*>::Node *n;
                n = m_images.find(name);
                if(n){
-                       if(!do_overwrite)
-                               return;
                        video::IImage *oldimg = n->getValue();
                        if(oldimg)
                                oldimg->drop();
                }
+               // Try to use local texture instead if asked to
+               if(prefer_local){
+                       std::string path = getTexturePath(name.c_str());
+                       if(path != ""){
+                               video::IImage *img2 = driver->createImageFromFile(path.c_str());
+                               if(img2){
+                                       m_images[name] = img2;
+                                       return;
+                               }
+                       }
+               }
                img->grab();
                m_images[name] = img;
        }
@@ -725,7 +735,7 @@ void TextureSource::insertSourceImage(const std::string &name, video::IImage *im
        
        assert(get_current_thread_id() == m_main_thread);
        
-       m_sourcecache.insert(name, img, false);
+       m_sourcecache.insert(name, img, true, m_device->getVideoDriver());
 }
        
 void TextureSource::rebuildImagesAndTextures()