aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorsapier <Sapier at GMX dot net>2014-06-12 22:41:57 +0200
committersapier <Sapier at GMX dot net>2014-06-23 00:13:41 +0200
commitfcfd53aed1c73b7730e0e666485c5130309d4914 (patch)
treeb0e07c22a8ad08109e9b58d99db530b0d5cd361d
parent334ec4bb1b031cd3423e52fdc7f7ec9e4dec8c84 (diff)
downloadminetest-fcfd53aed1c73b7730e0e666485c5130309d4914.tar.gz
minetest-fcfd53aed1c73b7730e0e666485c5130309d4914.tar.bz2
minetest-fcfd53aed1c73b7730e0e666485c5130309d4914.zip
Don't keep temporary images in RAM
-rw-r--r--src/tile.cpp35
1 files changed, 12 insertions, 23 deletions
diff --git a/src/tile.cpp b/src/tile.cpp
index 310630b84..c9a36918a 100644
--- a/src/tile.cpp
+++ b/src/tile.cpp
@@ -164,16 +164,13 @@ struct TextureInfo
{
std::string name;
video::ITexture *texture;
- video::IImage *img; // The source image
TextureInfo(
const std::string &name_,
- video::ITexture *texture_=NULL,
- video::IImage *img_=NULL
+ video::ITexture *texture_=NULL
):
name(name_),
- texture(texture_),
- img(img_)
+ texture(texture_)
{
}
};
@@ -460,10 +457,6 @@ TextureSource::~TextureSource()
//cleanup texture
if (iter->texture)
driver->removeTexture(iter->texture);
-
- //cleanup source image
- if (iter->img)
- iter->img->drop();
}
m_textureinfo_cache.clear();
@@ -666,23 +659,17 @@ u32 TextureSource::getTextureIdDirect(const std::string &name)
TextureInfo *ti = &m_textureinfo_cache[base_image_id];
- if(ti->img == NULL)
+ if(ti->texture == NULL)
{
- infostream<<"getTextureIdDirect(): WARNING: NULL image in "
+ infostream<<"getTextureIdDirect(): WARNING: NULL Texture in "
<<"cache: \""<<base_image_name<<"\""
<<std::endl;
}
else
{
- core::dimension2d<u32> dim = ti->img->getDimension();
-
- baseimg = driver->createImage(video::ECF_A8R8G8B8, dim);
+ core::dimension2d<u32> dim = ti->texture->getSize();
- ti->img->copyTo(
- baseimg, // target
- v2s32(0,0), // position in target
- core::rect<s32>(v2s32(0,0), dim) // from
- );
+ baseimg = driver->createImage(ti->texture,v2s32(0,0), dim);
/*infostream<<"getTextureIdDirect(): Loaded \""
<<base_image_name<<"\" from image cache"
@@ -717,6 +704,7 @@ u32 TextureSource::getTextureIdDirect(const std::string &name)
{
// Create texture from resulting image
t = driver->addTexture(name.c_str(), baseimg);
+ baseimg->drop();
}
/*
@@ -726,7 +714,7 @@ u32 TextureSource::getTextureIdDirect(const std::string &name)
JMutexAutoLock lock(m_textureinfo_cache_mutex);
u32 id = m_textureinfo_cache.size();
- TextureInfo ti(name, t, baseimg);
+ TextureInfo ti(name, t);
m_textureinfo_cache.push_back(ti);
m_name_to_id[name] = id;
@@ -809,12 +797,13 @@ void TextureSource::rebuildImagesAndTextures()
video::IImage *img = generateImageFromScratch(ti->name);
// Create texture from resulting image
video::ITexture *t = NULL;
- if(img)
+ if(img) {
t = driver->addTexture(ti->name.c_str(), img);
+ img->drop();
+ }
video::ITexture *t_old = ti->texture;
// Replace texture
ti->texture = t;
- ti->img = img;
if (t_old != 0)
m_texture_trash.push_back(t_old);
@@ -975,7 +964,7 @@ bool TextureSource::generateImage(std::string part_of_name, video::IImage *& bas
if (image == NULL) {
if (part_of_name != "") {
- if (part_of_name.find("_normal.png") == std::string::npos){
+ if (part_of_name.find("_normal.png") == std::string::npos){
errorstream<<"generateImage(): Could not load image \""
<<part_of_name<<"\""<<" while building texture"<<std::endl;
errorstream<<"generateImage(): Creating a dummy"