WillOWisp badguys can now be trapped inside empty Lanterns.
[supertux.git] / src / video / texture_manager.cpp
index 1f78be0..6326d04 100644 (file)
@@ -120,8 +120,10 @@ TextureManager::create_image_texture(const std::string& filename)
       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);
@@ -134,10 +136,12 @@ TextureManager::create_image_texture(const std::string& filename)
     result->image_height = image->h;
   } catch(...) {
     delete result;
+    SDL_FreeSurface(image);
     SDL_FreeSurface(convert);
     throw;
   }
-  
+
+  SDL_FreeSurface(image);
   SDL_FreeSurface(convert);
   return result;
 }
@@ -183,7 +187,7 @@ TextureManager::save_texture(Texture* texture)
 
   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);
 
@@ -204,11 +208,11 @@ TextureManager::reload_textures()
   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");
@@ -236,4 +240,3 @@ TextureManager::reload_textures()
 
   saved_textures.clear();
 }
-