Browse Source

be more aggressive freeing memory

David Rose 22 years ago
parent
commit
2c9ba8eec4

+ 2 - 0
pandatool/src/palettizer/destTextureImage.cxx

@@ -88,6 +88,8 @@ copy(TextureImage *texture) {
 
     write(dest_image);
   }
+
+  texture->release_source_image();
 }
 
 ////////////////////////////////////////////////////////////////////

+ 14 - 0
pandatool/src/palettizer/paletteImage.cxx

@@ -654,6 +654,8 @@ update_image(bool redo_all) {
   if (pal->_shadow_color_type != (PNMFileType *)NULL) {
     _shadow_image.write(_image);
   }
+
+  release_image();
 }
 
 
@@ -771,6 +773,18 @@ get_image() {
   }
 }
 
+////////////////////////////////////////////////////////////////////
+//     Function: PaletteImage::release_image
+//       Access: Public
+//  Description: Deallocates the memory allocated by a previous call to
+//               get_image().
+////////////////////////////////////////////////////////////////////
+void PaletteImage::
+release_image() {
+  _image.clear();
+  _got_image = false;
+}
+
 ////////////////////////////////////////////////////////////////////
 //     Function: PaletteImage::remove_image
 //       Access: Private

+ 1 - 0
pandatool/src/palettizer/paletteImage.h

@@ -66,6 +66,7 @@ private:
   bool find_hole(int &x, int &y, int x_size, int y_size) const;
   TexturePlacement *find_overlap(int x, int y, int x_size, int y_size) const;
   void get_image();
+  void release_image();
   void remove_image();
 
   // The ClearedRegion object keeps track of TexturePlacements that

+ 16 - 0
pandatool/src/palettizer/textureImage.cxx

@@ -752,6 +752,22 @@ read_source_image() {
   return _source_image;
 }
 
+////////////////////////////////////////////////////////////////////
+//     Function: TextureImage::release_source_image
+//       Access: Public
+//  Description: Frees the memory that was allocated by a previous
+//               call to read_source_image().  The next time
+//               read_source_image() is called, it will have to read
+//               the disk again.
+////////////////////////////////////////////////////////////////////
+void TextureImage::
+release_source_image() {
+  if (_read_source_image) {
+    _source_image.clear();
+    _read_source_image = false;
+  }
+}
+
 ////////////////////////////////////////////////////////////////////
 //     Function: TextureImage::set_source_image
 //       Access: Public

+ 1 - 0
pandatool/src/palettizer/textureImage.h

@@ -89,6 +89,7 @@ public:
   void copy_unplaced(bool redo_all);
 
   const PNMImage &read_source_image();
+  void release_source_image();
   void set_source_image(const PNMImage &image);
   void read_header();
   bool is_newer_than(const Filename &reference_filename);