mirror of
https://github.com/luanti-org/luanti.git
synced 2025-06-27 16:36:03 +00:00
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).
This commit is contained in:
parent
b1ef850877
commit
8f1d5d34a6
5 changed files with 202 additions and 230 deletions
|
@ -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
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue