diff --git a/pandatool/src/egg-palettize/eggFile.cxx b/pandatool/src/egg-palettize/eggFile.cxx index bc11b36bdd..48636db7e0 100644 --- a/pandatool/src/egg-palettize/eggFile.cxx +++ b/pandatool/src/egg-palettize/eggFile.cxx @@ -572,23 +572,25 @@ write_datagram(BamWriter *writer, Datagram &datagram) { //////////////////////////////////////////////////////////////////// int EggFile:: complete_pointers(TypedWritable **p_list, BamReader *manager) { - int index = TypedWritable::complete_pointers(p_list, manager); + int pi = TypedWritable::complete_pointers(p_list, manager); int i; _textures.reserve(_num_textures); for (i = 0; i < _num_textures; i++) { TextureReference *texture; - DCAST_INTO_R(texture, p_list[index], index); + DCAST_INTO_R(texture, p_list[pi], pi); _textures.push_back(texture); - index++; + pi++; } - if (p_list[index] != (TypedWritable *)NULL) { - DCAST_INTO_R(_default_group, p_list[index], index); - } - index++; + pi += _explicitly_assigned_groups.complete_pointers(p_list + pi, manager); - return index; + if (p_list[pi] != (TypedWritable *)NULL) { + DCAST_INTO_R(_default_group, p_list[pi], pi); + } + pi++; + + return pi; } //////////////////////////////////////////////////////////////////// diff --git a/pandatool/src/egg-palettize/imageFile.cxx b/pandatool/src/egg-palettize/imageFile.cxx index c4b68a5a66..804649931d 100644 --- a/pandatool/src/egg-palettize/imageFile.cxx +++ b/pandatool/src/egg-palettize/imageFile.cxx @@ -419,6 +419,24 @@ write_datagram(BamWriter *writer, Datagram &datagram) { datagram.add_int32(_y_size); } +//////////////////////////////////////////////////////////////////// +// Function: ImageFile::complete_pointers +// Access: Public, Virtual +// Description: Called after the object is otherwise completely read +// from a Bam file, this function's job is to store the +// pointers that were retrieved from the Bam file for +// each pointer object written. The return value is the +// number of pointers processed from the list. +//////////////////////////////////////////////////////////////////// +int ImageFile:: +complete_pointers(TypedWritable **p_list, BamReader *manager) { + int pi = TypedWritable::complete_pointers(p_list, manager); + + pi += _properties.complete_pointers(p_list + pi, manager); + + return pi; +} + //////////////////////////////////////////////////////////////////// // Function: ImageFile::fillin // Access: Protected diff --git a/pandatool/src/egg-palettize/imageFile.h b/pandatool/src/egg-palettize/imageFile.h index 5f02ca3841..b6a146cb46 100644 --- a/pandatool/src/egg-palettize/imageFile.h +++ b/pandatool/src/egg-palettize/imageFile.h @@ -77,6 +77,8 @@ protected: // The TypedWritable interface follows. public: virtual void write_datagram(BamWriter *writer, Datagram &datagram); + virtual int complete_pointers(TypedWritable **p_list, + BamReader *manager); protected: void fillin(DatagramIterator &scan, BamReader *manager); diff --git a/pandatool/src/egg-palettize/paletteGroup.cxx b/pandatool/src/egg-palettize/paletteGroup.cxx index 16282c4fb4..45ef01574d 100644 --- a/pandatool/src/egg-palettize/paletteGroup.cxx +++ b/pandatool/src/egg-palettize/paletteGroup.cxx @@ -633,15 +633,16 @@ write_datagram(BamWriter *writer, Datagram &datagram) { //////////////////////////////////////////////////////////////////// int PaletteGroup:: complete_pointers(TypedWritable **p_list, BamReader *manager) { - int index = TypedWritable::complete_pointers(p_list, manager); + int pi = TypedWritable::complete_pointers(p_list, manager); + + pi += _dependent.complete_pointers(p_list + pi, manager); int i; for (i = 0; i < _num_placements; i++) { TexturePlacement *placement; - DCAST_INTO_R(placement, p_list[index], index); - index++; + DCAST_INTO_R(placement, p_list[pi++], pi); bool inserted = _placements.insert(placement).second; - nassertr(inserted, index); + nassertr(inserted, pi); } // We must store the list of pages in a temporary vector first. We @@ -651,12 +652,11 @@ complete_pointers(TypedWritable **p_list, BamReader *manager) { _load_pages.reserve(_num_pages); for (i = 0; i < _num_pages; i++) { PalettePage *page; - DCAST_INTO_R(page, p_list[index], index); - index++; + DCAST_INTO_R(page, p_list[pi++], pi); _load_pages.push_back(page); } - return index; + return pi; } //////////////////////////////////////////////////////////////////// diff --git a/pandatool/src/egg-palettize/palettePage.cxx b/pandatool/src/egg-palettize/palettePage.cxx index a0d9c29a7f..e59faaad7d 100644 --- a/pandatool/src/egg-palettize/palettePage.cxx +++ b/pandatool/src/egg-palettize/palettePage.cxx @@ -296,23 +296,24 @@ write_datagram(BamWriter *writer, Datagram &datagram) { //////////////////////////////////////////////////////////////////// int PalettePage:: complete_pointers(TypedWritable **p_list, BamReader *manager) { - int index = TypedWritable::complete_pointers(p_list, manager); + int pi = TypedWritable::complete_pointers(p_list, manager); - if (p_list[index] != (TypedWritable *)NULL) { - DCAST_INTO_R(_group, p_list[index], index); + if (p_list[pi] != (TypedWritable *)NULL) { + DCAST_INTO_R(_group, p_list[pi], pi); } - index++; + pi++; + + pi += _properties.complete_pointers(p_list + pi, manager); int i; _images.reserve(_num_images); for (i = 0; i < _num_images; i++) { PaletteImage *image; - DCAST_INTO_R(image, p_list[index], index); + DCAST_INTO_R(image, p_list[pi++], pi); _images.push_back(image); - index++; } - return index; + return pi; } //////////////////////////////////////////////////////////////////// diff --git a/pandatool/src/egg-palettize/textureImage.cxx b/pandatool/src/egg-palettize/textureImage.cxx index f5252ed9b4..9c8cc9980c 100644 --- a/pandatool/src/egg-palettize/textureImage.cxx +++ b/pandatool/src/egg-palettize/textureImage.cxx @@ -1173,39 +1173,37 @@ write_datagram(BamWriter *writer, Datagram &datagram) { //////////////////////////////////////////////////////////////////// int TextureImage:: complete_pointers(TypedWritable **p_list, BamReader *manager) { - int index = ImageFile::complete_pointers(p_list, manager); + int pi = ImageFile::complete_pointers(p_list, manager); + + pi += _actual_assigned_groups.complete_pointers(p_list + pi, manager); int i; for (i = 0; i < _num_placement; i++) { PaletteGroup *group; TexturePlacement *placement; - DCAST_INTO_R(group, p_list[index], index); - index++; - DCAST_INTO_R(placement, p_list[index], index); - index++; + DCAST_INTO_R(group, p_list[pi++], pi); + DCAST_INTO_R(placement, p_list[pi++], pi); _placement.insert(Placement::value_type(group, placement)); } for (i = 0; i < _num_sources; i++) { SourceTextureImage *source; - DCAST_INTO_R(source, p_list[index], index); + DCAST_INTO_R(source, p_list[pi++], pi); string key = get_source_key(source->get_filename(), source->get_alpha_filename()); bool inserted = _sources.insert(Sources::value_type(key, source)).second; - index++; - nassertr(inserted, index); + nassertr(inserted, pi); } for (i = 0; i < _num_dests; i++) { DestTextureImage *dest; - DCAST_INTO_R(dest, p_list[index], index); + DCAST_INTO_R(dest, p_list[pi++], pi); bool inserted = _dests.insert(Dests::value_type(dest->get_filename(), dest)).second; - index++; - nassertr(inserted, index); + nassertr(inserted, pi); } - return index; + return pi; } //////////////////////////////////////////////////////////////////// diff --git a/pandatool/src/egg-palettize/textureReference.cxx b/pandatool/src/egg-palettize/textureReference.cxx index 226beab8f9..6404fc7b3a 100644 --- a/pandatool/src/egg-palettize/textureReference.cxx +++ b/pandatool/src/egg-palettize/textureReference.cxx @@ -722,24 +722,26 @@ write_datagram(BamWriter *writer, Datagram &datagram) { //////////////////////////////////////////////////////////////////// int TextureReference:: complete_pointers(TypedWritable **p_list, BamReader *manager) { - int index = TypedWritable::complete_pointers(p_list, manager); + int pi = TypedWritable::complete_pointers(p_list, manager); - if (p_list[index] != (TypedWritable *)NULL) { - DCAST_INTO_R(_egg_file, p_list[index], index); + if (p_list[pi] != (TypedWritable *)NULL) { + DCAST_INTO_R(_egg_file, p_list[pi], pi); } - index++; + pi++; - if (p_list[index] != (TypedWritable *)NULL) { - DCAST_INTO_R(_source_texture, p_list[index], index); + if (p_list[pi] != (TypedWritable *)NULL) { + DCAST_INTO_R(_source_texture, p_list[pi], pi); } - index++; + pi++; - if (p_list[index] != (TypedWritable *)NULL) { - DCAST_INTO_R(_placement, p_list[index], index); + if (p_list[pi] != (TypedWritable *)NULL) { + DCAST_INTO_R(_placement, p_list[pi], pi); } - index++; + pi++; - return index; + pi += _properties.complete_pointers(p_list + pi, manager); + + return pi; } ////////////////////////////////////////////////////////////////////