summaryrefslogtreecommitdiff
path: root/src/itemdef.cpp
diff options
context:
space:
mode:
authorsapier <Sapier at GMX dot net>2013-04-07 20:00:25 +0200
committerkwolekr <kwolekr@minetest.net>2013-04-09 02:14:52 -0400
commit58fd39de35fc541ee6f50cc7b85ff29ab749778a (patch)
tree731384cf4e1a31be93b50c5d040734b7f2d28674 /src/itemdef.cpp
parent94490268396644cc783cb0b16d1214ad52319d28 (diff)
downloadminetest-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.cpp25
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