Delay deleting replaced textures (m_texture_trash)
This commit is contained in:
parent
9fe74a34ea
commit
b89c79e905
16
src/tile.cpp
16
src/tile.cpp
|
@ -440,6 +440,10 @@ private:
|
||||||
|
|
||||||
// Queued texture fetches (to be processed by the main thread)
|
// Queued texture fetches (to be processed by the main thread)
|
||||||
RequestQueue<std::string, u32, u8, u8> m_get_texture_queue;
|
RequestQueue<std::string, u32, u8, u8> m_get_texture_queue;
|
||||||
|
|
||||||
|
// Textures that have been overwritten with other ones
|
||||||
|
// but can't be deleted because the ITexture* might still be used
|
||||||
|
std::list<video::ITexture*> m_texture_trash;
|
||||||
};
|
};
|
||||||
|
|
||||||
IWritableTextureSource* createTextureSource(IrrlichtDevice *device)
|
IWritableTextureSource* createTextureSource(IrrlichtDevice *device)
|
||||||
|
@ -485,6 +489,16 @@ TextureSource::~TextureSource()
|
||||||
}
|
}
|
||||||
m_atlaspointer_cache.clear();
|
m_atlaspointer_cache.clear();
|
||||||
|
|
||||||
|
for (std::list<video::ITexture*>::iterator iter =
|
||||||
|
m_texture_trash.begin(); iter != m_texture_trash.end();
|
||||||
|
iter++)
|
||||||
|
{
|
||||||
|
video::ITexture *t = *iter;
|
||||||
|
|
||||||
|
//cleanup trashed texture
|
||||||
|
driver->removeTexture(t);
|
||||||
|
}
|
||||||
|
|
||||||
infostream << "~TextureSource() "<< textures_before << "/"
|
infostream << "~TextureSource() "<< textures_before << "/"
|
||||||
<< driver->getTextureCount() << std::endl;
|
<< driver->getTextureCount() << std::endl;
|
||||||
}
|
}
|
||||||
|
@ -870,7 +884,7 @@ void TextureSource::rebuildImagesAndTextures()
|
||||||
sap->intsize = img->getDimension();
|
sap->intsize = img->getDimension();
|
||||||
|
|
||||||
if (t_old != 0)
|
if (t_old != 0)
|
||||||
driver->removeTexture(t_old);
|
m_texture_trash.push_back(t_old);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue