summaryrefslogtreecommitdiff
path: root/src/itemdef.cpp
diff options
context:
space:
mode:
authorKahrl <kahrl@gmx.net>2013-07-03 02:22:39 +0200
committerKahrl <kahrl@gmx.net>2013-07-03 03:24:28 +0200
commit8f1d5d34a6191346d7f8cb5e012053bcd19795c4 (patch)
tree05626dceb2ba4ce97ed79cb3f5d43c2dd5a12513 /src/itemdef.cpp
parentb1ef850877278d2af0b35f792e34b39258cf875f (diff)
downloadminetest-8f1d5d34a6191346d7f8cb5e012053bcd19795c4.tar.gz
minetest-8f1d5d34a6191346d7f8cb5e012053bcd19795c4.tar.bz2
minetest-8f1d5d34a6191346d7f8cb5e012053bcd19795c4.zip
Move generateTextureFromMesh to TextureSource to fix a texture leak
TextureSource has a list of textures to delete (m_texture_trash) so this provides a proper, non-hacky way to delete RTT textures. Also, the prior, hacky way of deleting them seems to be broken (see pull request #803). To avoid header file clutter by repeating the same long list of arguments over and over again, store the arguments of generateTextureFromMesh in a struct called TextureFromMeshParams. Also fix issue #782 (Only use bilinear (and others) on item textures when settings allow it).
Diffstat (limited to 'src/itemdef.cpp')
-rw-r--r--src/itemdef.cpp60
1 files changed, 15 insertions, 45 deletions
diff --git a/src/itemdef.cpp b/src/itemdef.cpp
index b582aef78..238ff58c0 100644
--- a/src/itemdef.cpp
+++ b/src/itemdef.cpp
@@ -229,7 +229,6 @@ public:
#ifndef SERVER
m_main_thread = get_current_thread_id();
- m_driver = NULL;
#endif
clear();
}
@@ -246,13 +245,6 @@ public:
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
for (std::map<std::string, ItemDefinition*>::iterator iter =
m_item_definitions.begin(); iter != m_item_definitions.end();
@@ -307,9 +299,6 @@ 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
@@ -416,31 +405,25 @@ public:
*/
if(cc->inventory_texture == NULL)
{
- core::dimension2d<u32> dim(64,64);
- std::string rtt_texture_name = "INVENTORY_"
+ TextureFromMeshParams params;
+ params.mesh = node_mesh;
+ params.dim.set(64, 64);
+ params.rtt_texture_name = "INVENTORY_"
+ def->name + "_RTT";
- v3f camera_position(0, 1.0, -1.5);
- camera_position.rotateXZBy(45);
- v3f camera_lookat(0, 0, 0);
- core::CMatrix4<f32> camera_projection_matrix;
+ params.delete_texture_on_shutdown = true;
+ params.camera_position.set(0, 1.0, -1.5);
+ params.camera_position.rotateXZBy(45);
+ params.camera_lookat.set(0, 0, 0);
// Set orthogonal projection
- camera_projection_matrix.buildProjectionMatrixOrthoLH(
+ params.camera_projection_matrix.buildProjectionMatrixOrthoLH(
1.65, 1.65, 0, 100);
+ params.ambient_light.set(1.0, 0.2, 0.2, 0.2);
+ params.light_position.set(10, 100, -50);
+ params.light_color.set(1.0, 0.5, 0.5, 0.5);
+ params.light_radius = 1000;
- video::SColorf ambient_light(0.2,0.2,0.2);
- v3f light_position(10, 100, -50);
- video::SColorf light_color(0.5,0.5,0.5);
- f32 light_radius = 1000;
-
- cc->inventory_texture = generateTextureFromMesh(
- node_mesh, device, dim, rtt_texture_name,
- camera_position,
- camera_lookat,
- camera_projection_matrix,
- ambient_light,
- light_position,
- light_color,
- light_radius);
+ cc->inventory_texture =
+ tsrc->generateTextureFromMesh(params);
// render-to-target didn't work
if(cc->inventory_texture == NULL)
@@ -449,13 +432,6 @@ public:
tsrc->getTexture(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
@@ -681,9 +657,3 @@ 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