Panda3D

Loading...
Searching...
No Matches
Public Types | Public Member Functions | Static Public Member Functions | Public Attributes | List of all members
EggTextureCollection Class Reference

This is a collection of textures by TRef name. More...

`#include "eggTextureCollection.h"`

## Public Types
typedef iterator | const_iterator
typedef OrderedTextures::const_iterator | iterator
typedef OrderedTextures::size_type | size_type
typedef pmap< PT_EggTexture, PT_EggTexture > | TextureReplacement

## Public Member Functions
| EggTextureCollection (const EggTextureCollection &copy)
bool | add_texture (EggTexture *texture)
| Explicitly adds a new texture to the collection.
iterator | begin () const
void | clear ()
| Removes all textures from the collection.
int | collapse_equivalent_textures (int eq, EggGroupNode *node)
| Walks through the collection and collapses together any separate textures that are equivalent according to the indicated equivalence factor, eq (see EggTexture::is_equivalent_to()).
int | collapse_equivalent_textures (int eq, TextureReplacement &removed)
| Walks through the collection and collapses together any separate textures that are equivalent according to the indicated equivalence factor, eq (see EggTexture::is_equivalent_to()).
EggTexture * | create_unique_texture (const EggTexture &copy, int eq)
| Creates a new texture if there is not already one equivalent (according to eq, see EggTexture::is_equivalent_to()) to the indicated texture, or returns the existing one if there is.
bool | empty () const
iterator | end () const
int | extract_textures (EggGroupNode *node)
| Walks the egg hierarchy beginning at the indicated node, and removes any EggTextures encountered in the hierarchy, adding them to the collection.
EggTexture * | find_filename (const Filename &filename) const
| Returns the texture with the indicated filename, or NULL if no texture matches.
EggTexture * | find_tref (const std::string &tref_name) const
| Returns the texture with the indicated TRef name, or NULL if no texture matches.
int | find_used_textures (EggNode *node)
| Walks the egg hierarchy beginning at the indicated node, looking for textures that are referenced by primitives but are not already members of the collection, adding them to the collection.
int | get_num_textures () const
EggTexture * | get_texture (int index) const
EggGroupNode::iterator | insert_textures (EggGroupNode *node)
| Adds a series of EggTexture nodes to the beginning of the indicated node to reflect each of the textures in the collection.
EggGroupNode::iterator | insert_textures (EggGroupNode *node, EggGroupNode::iterator position)
| Adds a series of EggTexture nodes to the beginning of the indicated node to reflect each of the textures in the collection.
bool | is_empty () const
| Returns true if there are no EggTexures in the collection, false otherwise.
EggTextureCollection & | operator= (const EggTextureCollection &copy)
EggTexture * | operator[] (size_type n) const
| Returns the nth EggTexture in the collection.
bool | remove_texture (EggTexture *texture)
| Explicitly removes a texture from the collection.
void | remove_unused_textures (EggNode *node)
| Removes any textures from the collection that aren't referenced by any primitives in the indicated egg hierarchy.
size_type | size () const
| Returns the number of EggTextures in the collection.
void | sort_by_basename ()
| Sorts all the textures into alphabetical order by the basename part (including extension) of the filename.
void | sort_by_tref ()
| Sorts all the textures into alphabetical order by TRef name.
void | uniquify_trefs ()
| Guarantees that each texture in the collection has a unique TRef name.

## Static Public Member Functions
static void | replace_textures (EggGroupNode *node, const TextureReplacement &replace)
| Walks the egg hierarchy, changing out any reference to a texture appearing on the left side of the map with its corresponding texture on the right side.

## Public Attributes
| get_num_textures
| Returns the number of EggTextures in the collection.
| get_texture
| Returns the nth EggTexture in the collection.

## Detailed Description

This is a collection of textures by TRef name.

It can extract the textures from an egg file and sort them all together; it can also manage the creation of unique textures and the assignment of unique TRef names.

Definition at line 30 of file eggTextureCollection.h.

## Member Typedef Documentation

## ◆ const_iterator

typedef iterator EggTextureCollection::const_iterator

Definition at line 42 of file eggTextureCollection.h.

## ◆ iterator

typedef OrderedTextures::const_iterator EggTextureCollection::iterator

Definition at line 41 of file eggTextureCollection.h.

## ◆ size_type

typedef OrderedTextures::size_type EggTextureCollection::size_type

Definition at line 43 of file eggTextureCollection.h.

## ◆ TextureReplacement

typedef pmap<PT_EggTexture, PT_EggTexture > EggTextureCollection::TextureReplacement

Definition at line 45 of file eggTextureCollection.h.

## Constructor & Destructor Documentation

## ◆ EggTextureCollection() [1/2]

EggTextureCollection::EggTextureCollection | ( |  | ) |

Definition at line 28 of file eggTextureCollection.cxx.

## ◆ EggTextureCollection() [2/2]

EggTextureCollection::EggTextureCollection | ( | const EggTextureCollection & | copy | ) |

Definition at line 35 of file eggTextureCollection.cxx.

## ◆ ~EggTextureCollection()

EggTextureCollection::~EggTextureCollection | ( |  | ) |

Definition at line 55 of file eggTextureCollection.cxx.

## Member Function Documentation

## ◆ add_texture()

bool EggTextureCollection::add_texture | ( | EggTexture * | texture | ) |

Explicitly adds a new texture to the collection.

Returns true if the texture was added, false if it was already there or if there was some error.

Definition at line 378 of file eggTextureCollection.cxx.

Referenced by collapse_equivalent_textures(), and create_unique_texture().

## ◆ begin()

EggTextureCollection::iterator EggTextureCollection::begin | ( |  | ) | const
| inline

Definition at line 17 of file eggTextureCollection.I.

## ◆ clear()

void EggTextureCollection::clear | ( |  | ) |

Removes all textures from the collection.

Definition at line 62 of file eggTextureCollection.cxx.

Referenced by collapse_equivalent_textures(), and remove_unused_textures().

## ◆ collapse_equivalent_textures() [1/2]

int EggTextureCollection::collapse_equivalent_textures | ( | int | eq,
|  | EggGroupNode * | node )

Walks through the collection and collapses together any separate textures that are equivalent according to the indicated equivalence factor, eq (see EggTexture::is_equivalent_to()).

The return value is the number of textures removed.

This flavor of collapse_equivalent_textures() automatically adjusts all the primitives in the egg hierarchy to refer to the new texture pointers.

Definition at line 234 of file eggTextureCollection.cxx.

References collapse_equivalent_textures(), and replace_textures().

Referenced by EggData::collapse_equivalent_textures(), and collapse_equivalent_textures().

## ◆ collapse_equivalent_textures() [2/2]

int EggTextureCollection::collapse_equivalent_textures | ( | int | eq,
|  | EggTextureCollection::TextureReplacement & | removed )

Walks through the collection and collapses together any separate textures that are equivalent according to the indicated equivalence factor, eq (see EggTexture::is_equivalent_to()).

The return value is the number of textures removed.

This flavor of collapse_equivalent_textures() does not adjust any primitives in the egg hierarchy; instead, it fills up the 'removed' map with an entry for each removed texture, mapping it back to the equivalent retained texture. It's up to the user to then call replace_textures() with this map, if desired, to apply these changes to the egg hierarchy.

Definition at line 258 of file eggTextureCollection.cxx.

References add_texture(), and clear().

## ◆ create_unique_texture()

EggTexture * EggTextureCollection::create_unique_texture | ( | const EggTexture & | copy,
|  | int | eq )

Creates a new texture if there is not already one equivalent (according to eq, see EggTexture::is_equivalent_to()) to the indicated texture, or returns the existing one if there is.

Definition at line 431 of file eggTextureCollection.cxx.

References add_texture(), and EggTexture::is_equivalent_to().

## ◆ empty()

bool EggTextureCollection::empty | ( |  | ) | const
| inline

Definition at line 35 of file eggTextureCollection.I.

## ◆ end()

EggTextureCollection::iterator EggTextureCollection::end | ( |  | ) | const
| inline

Definition at line 27 of file eggTextureCollection.I.

## ◆ extract_textures()

int EggTextureCollection::extract_textures | ( | EggGroupNode * | node | ) |

Walks the egg hierarchy beginning at the indicated node, and removes any EggTextures encountered in the hierarchy, adding them to the collection.

Returns the number of EggTextures encountered.

Definition at line 73 of file eggTextureCollection.cxx.

## ◆ find_filename()

EggTexture * EggTextureCollection::find_filename | ( | const Filename & | filename | ) | const

Returns the texture with the indicated filename, or NULL if no texture matches.

Definition at line 475 of file eggTextureCollection.cxx.

References EggFilenameNode::get_filename().

## ◆ find_tref()

EggTexture * EggTextureCollection::find_tref | ( | const std::string & | tref_name | ) | const

Returns the texture with the indicated TRef name, or NULL if no texture matches.

Definition at line 455 of file eggTextureCollection.cxx.

## ◆ find_used_textures()

int EggTextureCollection::find_used_textures | ( | EggNode * | node | ) |

Walks the egg hierarchy beginning at the indicated node, looking for textures that are referenced by primitives but are not already members of the collection, adding them to the collection.

If this is called following extract_textures(), it can be used to pick up any additional texture references that appeared in the egg hierarchy (but whose EggTexture node was not actually part of the hierarchy).

If this is called in lieu of extract_textures(), it will fill up the collection with all of the referenced textures (and only the referenced textures), without destructively removing the EggTextures from the hierarchy.

This also has the side effect of incrementing the internal usage count for a texture in the collection each time a texture reference is encountered. This side effect is taken advantage of by remove_unused_textures().

And one more side effect: this function identifies the presence of multitexturing in the egg file, and calls multitexture_over() on each texture appropriately so that, after this call, you may expect get_multitexture_sort() to return a reasonable value for each texture.

Definition at line 158 of file eggTextureCollection.cxx.

References find_used_textures(), EggPrimitive::get_num_textures, EggPrimitive::get_texture, TypedObject::is_of_type(), and EggTexture::multitexture_over().

Referenced by EggNode::apply_texmats(), EggData::collapse_equivalent_textures(), find_used_textures(), EggFile::read_egg(), EggGroupNode::recompute_tangent_binormal_auto(), remove_unused_textures(), and EggFile::scan_textures().

## ◆ insert_textures() [1/2]

EggGroupNode::iterator EggTextureCollection::insert_textures | ( | EggGroupNode * | node | ) |

Adds a series of EggTexture nodes to the beginning of the indicated node to reflect each of the textures in the collection.

Returns an iterator representing the first position after the newly inserted textures.

Definition at line 112 of file eggTextureCollection.cxx.

References insert_textures().

Referenced by insert_textures().

## ◆ insert_textures() [2/2]

EggGroupNode::iterator EggTextureCollection::insert_textures | ( | EggGroupNode * | node,
|  | EggGroupNode::iterator | position )

Adds a series of EggTexture nodes to the beginning of the indicated node to reflect each of the textures in the collection.

Returns an iterator representing the first position after the newly inserted textures.

Definition at line 122 of file eggTextureCollection.cxx.

## ◆ is_empty()

bool EggTextureCollection::is_empty | ( |  | ) | const

Returns true if there are no EggTexures in the collection, false otherwise.

Definition at line 84 of file eggTextureCollection.cxx.

## ◆ operator=()

EggTextureCollection & EggTextureCollection::operator= | ( | const EggTextureCollection & | copy | ) |

Definition at line 45 of file eggTextureCollection.cxx.

## ◆ operator[]()

EggTexture * EggTextureCollection::operator[] | ( | size_type | n | ) | const
| inline

Returns the nth EggTexture in the collection.

Definition at line 43 of file eggTextureCollection.I.

References get_texture.

## ◆ remove_texture()

bool EggTextureCollection::remove_texture | ( | EggTexture * | texture | ) |

Explicitly removes a texture from the collection.

Returns true if the texture was removed, false if it wasn't there or if there was some error.

Definition at line 402 of file eggTextureCollection.cxx.

## ◆ remove_unused_textures()

void EggTextureCollection::remove_unused_textures | ( | EggNode * | node | ) |

Removes any textures from the collection that aren't referenced by any primitives in the indicated egg hierarchy.

This also, incidentally, adds textures to the collection that had been referenced by primitives but had not previously appeared in the collection.

Definition at line 216 of file eggTextureCollection.cxx.

References clear(), and find_used_textures().

## ◆ replace_textures()

void EggTextureCollection::replace_textures | ( | EggGroupNode * | node,
|  | const TextureReplacement & | replace )
| static

Walks the egg hierarchy, changing out any reference to a texture appearing on the left side of the map with its corresponding texture on the right side.

This is most often done following a call to collapse_equivalent_textures(). It does not directly affect the Collection.

Definition at line 300 of file eggTextureCollection.cxx.

References TypedObject::is_of_type(), and replace_textures().

Referenced by collapse_equivalent_textures(), and replace_textures().

## ◆ size()

EggTextureCollection::size_type EggTextureCollection::size | ( |  | ) | const
| inline

Returns the number of EggTextures in the collection.

Definition at line 51 of file eggTextureCollection.I.

## ◆ sort_by_basename()

void EggTextureCollection::sort_by_basename | ( |  | ) |

Sorts all the textures into alphabetical order by the basename part (including extension) of the filename.

Subsequent operations using begin()/end() will traverse in this sorted order.

Definition at line 367 of file eggTextureCollection.cxx.

## ◆ sort_by_tref()

void EggTextureCollection::sort_by_tref | ( |  | ) |

Sorts all the textures into alphabetical order by TRef name.

Subsequent operations using begin()/end() will traverse in this sorted order.

Definition at line 356 of file eggTextureCollection.cxx.

## ◆ uniquify_trefs()

void EggTextureCollection::uniquify_trefs | ( |  | ) |

Guarantees that each texture in the collection has a unique TRef name.

This is essential before writing an egg file.

Definition at line 338 of file eggTextureCollection.cxx.

References NameUniquifier::add_name().

Referenced by EggFile::read_egg(), and EggFile::scan_textures().

## Member Data Documentation

## ◆ get_num_textures

int EggTextureCollection::get_num_textures

Returns the number of EggTextures in the collection.

Definition at line 62 of file eggTextureCollection.h.

## ◆ get_texture

EggTexture * EggTextureCollection::get_texture

Returns the nth EggTexture in the collection.

Definition at line 62 of file eggTextureCollection.h.

Referenced by operator[]().

The documentation for this class was generated from the following files:

- panda/src/egg/eggTextureCollection.h
- panda/src/egg/eggTextureCollection.cxx
- panda/src/egg/eggTextureCollection.I