+// $Id$
+//
+// SuperTux
+// Copyright (C) 2006 Matthias Braun <matze@braunis.de>
+//
+// This program is free software; you can redistribute it and/or
+// modify it under the terms of the GNU General Public License
+// as published by the Free Software Foundation; either version 2
+// of the License, or (at your option) any later version.
+//
+// This program is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with this program; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+
#include <config.h>
#include "texture_manager.hpp"
#include "image_texture.hpp"
#include "glutil.hpp"
#include "file_system.hpp"
+#include "log.hpp"
TextureManager* texture_manager = NULL;
i != image_textures.end(); ++i) {
if(i->second == NULL)
continue;
-#ifdef DEBUG
- std::cerr << "Warning: Texture '" << i->first << "' not freed\n";
-#endif
+ log_warning << "Texture '" << i->first << "' not freed" << std::endl;
delete i->second;
}
}
void
TextureManager::release(ImageTexture* texture)
{
- image_textures[texture->filename] = NULL;
+ image_textures.erase(texture->filename);
delete texture;
}
0x000000ff, 0x0000ff00, 0x00ff0000, 0xff000000);
#endif
- if(convert == 0)
+ if(convert == 0) {
+ SDL_FreeSurface(image);
throw std::runtime_error("Couldn't create texture: out of memory");
+ }
SDL_SetAlpha(image, 0, 0);
SDL_BlitSurface(image, 0, convert, 0);
result->image_height = image->h;
} catch(...) {
delete result;
+ SDL_FreeSurface(image);
SDL_FreeSurface(convert);
throw;
}
-
+
+ SDL_FreeSurface(image);
SDL_FreeSurface(convert);
return result;
}
size_t pixelssize = saved_texture.width * saved_texture.height * 4;
saved_texture.pixels = new char[pixelssize];
-
+
glGetTexImage(GL_TEXTURE_2D, 0, GL_RGBA, GL_UNSIGNED_BYTE,
saved_texture.pixels);
glDeleteTextures(1, &(texture->handle));
texture->handle = 0;
- assert_gl("retrieving texture");
+ assert_gl("retrieving texture for save");
}
void
glPixelStorei(GL_UNPACK_SKIP_ROWS, 0);
glPixelStorei(GL_UNPACK_SKIP_IMAGES, 0);
glPixelStorei(GL_UNPACK_ALIGNMENT, 1);
-
+
for(std::vector<SavedTexture>::iterator i = saved_textures.begin();
i != saved_textures.end(); ++i) {
SavedTexture& saved_texture = *i;
-
+
GLuint handle;
glGenTextures(1, &handle);
assert_gl("creating texture handle");
saved_textures.clear();
}
-