diff options
author | Perttu Ahola <celeron55@gmail.com> | 2012-11-30 22:19:50 +0200 |
---|---|---|
committer | Perttu Ahola <celeron55@gmail.com> | 2012-11-30 22:19:54 +0200 |
commit | 778d9b0cd609ee24a86e88dbd1fe396d809683d9 (patch) | |
tree | 12e658868b3708ff07fd1f7fc326869f03127555 | |
parent | 84ace278729a965c8eecc6ee1b6bbedaa27705f0 (diff) | |
download | minetest-778d9b0cd609ee24a86e88dbd1fe396d809683d9.tar.gz minetest-778d9b0cd609ee24a86e88dbd1fe396d809683d9.tar.bz2 minetest-778d9b0cd609ee24a86e88dbd1fe396d809683d9.zip |
Add the ability for client to check if image exists
-rw-r--r-- | src/tile.cpp | 16 | ||||
-rw-r--r-- | src/tile.h | 2 |
2 files changed, 18 insertions, 0 deletions
diff --git a/src/tile.cpp b/src/tile.cpp index f7f1779ca..7cad1b836 100644 --- a/src/tile.cpp +++ b/src/tile.cpp @@ -372,6 +372,18 @@ public: // Update new texture pointer and texture coordinates to an // AtlasPointer based on it's texture id void updateAP(AtlasPointer &ap); + + bool isKnownSourceImage(const std::string &name) + { + bool is_known = false; + bool cache_found = m_source_image_existence.get(name, &is_known); + if(cache_found) + return is_known; + // Not found in cache; find out if a local file exists + is_known = (getTexturePath(name) != ""); + m_source_image_existence.set(name, is_known); + return is_known; + } // Processes queued texture requests from other threads. // Shall be called from the main thread. @@ -400,6 +412,9 @@ private: // This should be only accessed from the main thread SourceImageCache m_sourcecache; + // Thread-safe cache of what source images are known (true = known) + MutexedMap<std::string, bool> m_source_image_existence; + // A texture id is index in this array. // The first position contains a NULL texture. core::array<SourceAtlasPointer> m_atlaspointer_cache; @@ -781,6 +796,7 @@ void TextureSource::insertSourceImage(const std::string &name, video::IImage *im assert(get_current_thread_id() == m_main_thread); m_sourcecache.insert(name, img, true, m_device->getVideoDriver()); + m_source_image_existence.set(name, true); } void TextureSource::rebuildImagesAndTextures() diff --git a/src/tile.h b/src/tile.h index ae986e797..12c40c833 100644 --- a/src/tile.h +++ b/src/tile.h @@ -131,6 +131,7 @@ public: virtual IrrlichtDevice* getDevice() {return NULL;} virtual void updateAP(AtlasPointer &ap){}; + virtual bool isKnownSourceImage(const std::string &name)=0; }; class IWritableTextureSource : public ITextureSource @@ -149,6 +150,7 @@ public: virtual IrrlichtDevice* getDevice() {return NULL;} virtual void updateAP(AtlasPointer &ap){}; + virtual bool isKnownSourceImage(const std::string &name)=0; virtual void processQueue()=0; virtual void insertSourceImage(const std::string &name, video::IImage *img)=0; |