diff options
author | sapier <Sapier at GMX dot net> | 2013-04-07 20:00:25 +0200 |
---|---|---|
committer | kwolekr <kwolekr@minetest.net> | 2013-04-09 02:14:52 -0400 |
commit | 58fd39de35fc541ee6f50cc7b85ff29ab749778a (patch) | |
tree | 731384cf4e1a31be93b50c5d040734b7f2d28674 /src/itemdef.cpp | |
parent | 94490268396644cc783cb0b16d1214ad52319d28 (diff) | |
download | minetest-58fd39de35fc541ee6f50cc7b85ff29ab749778a.tar.gz minetest-58fd39de35fc541ee6f50cc7b85ff29ab749778a.tar.bz2 minetest-58fd39de35fc541ee6f50cc7b85ff29ab749778a.zip |
fix extruded items texture leak
Diffstat (limited to 'src/itemdef.cpp')
-rw-r--r-- | src/itemdef.cpp | 25 |
1 files changed, 25 insertions, 0 deletions
diff --git a/src/itemdef.cpp b/src/itemdef.cpp index bb2946992..784919ae2 100644 --- a/src/itemdef.cpp +++ b/src/itemdef.cpp @@ -234,6 +234,7 @@ public: m_item_definitions.clear(); #ifndef SERVER m_main_thread = get_current_thread_id(); + m_driver = NULL; #endif clear(); @@ -249,6 +250,14 @@ public: cc->wield_mesh->drop(); delete cc; } + + if (m_driver != NULL) { + for (unsigned int i = 0; i < m_extruded_textures.size(); i++) { + m_driver->removeTexture(m_extruded_textures[i]); + } + m_extruded_textures.clear(); + } + m_driver = NULL; #endif } virtual const ItemDefinition& get(const std::string &name_) const @@ -297,6 +306,10 @@ public: return m_item_definitions.find(name) != m_item_definitions.end(); } #ifndef SERVER +private: + static video::IVideoDriver * m_driver; + static std::vector<video::ITexture*> m_extruded_textures; +public: ClientCached* createClientCachedDirect(const std::string &name, IGameDef *gamedef) const { @@ -435,6 +448,13 @@ public: tsrc->getTextureRaw(f.tiledef[0].name); } } + else + { + if (m_driver == 0) + m_driver = driver; + + m_extruded_textures.push_back(cc->inventory_texture); + } /* Use the node mesh as the wield mesh @@ -661,3 +681,8 @@ IWritableItemDefManager* createItemDefManager() return new CItemDefManager(); } +#ifndef SERVER +//TODO very very very dirty hack! +video::IVideoDriver * CItemDefManager::m_driver = 0; +std::vector<video::ITexture*> CItemDefManager::m_extruded_textures; +#endif |