be more aggressive freeing memory

This commit is contained in:
David Rose 2003-12-18 23:21:38 +00:00
parent d353a08dd1
commit 2c9ba8eec4
5 changed files with 34 additions and 0 deletions

View File

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

View File

@ -654,6 +654,8 @@ update_image(bool redo_all) {
if (pal->_shadow_color_type != (PNMFileType *)NULL) { if (pal->_shadow_color_type != (PNMFileType *)NULL) {
_shadow_image.write(_image); _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 // Function: PaletteImage::remove_image
// Access: Private // Access: Private

View File

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

View File

@ -752,6 +752,22 @@ read_source_image() {
return _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 // Function: TextureImage::set_source_image
// Access: Public // Access: Public

View File

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