Readded and optimized mapgen V6
[oweals/minetest.git] / src / tile.cpp
index f7f1779ca51f619d9d987de00b3fab200d085c22..7cad1b83692399392cacbf6ede423d0c543fc014 100644 (file)
@@ -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()