00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015 #ifndef EGGTEXTURECOLLECTION_H
00016 #define EGGTEXTURECOLLECTION_H
00017
00018 #include "pandabase.h"
00019
00020 #include "eggTexture.h"
00021 #include "eggGroupNode.h"
00022 #include "vector_PT_EggTexture.h"
00023
00024 #include "pmap.h"
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034 class EXPCL_PANDAEGG EggTextureCollection {
00035
00036
00037
00038
00039
00040 private:
00041 typedef pmap<PT_EggTexture, int> Textures;
00042 typedef vector_PT_EggTexture OrderedTextures;
00043
00044 public:
00045 typedef OrderedTextures::const_iterator iterator;
00046 typedef iterator const_iterator;
00047 typedef OrderedTextures::size_type size_type;
00048
00049 typedef pmap<PT_EggTexture, PT_EggTexture > TextureReplacement;
00050
00051
00052
00053 PUBLISHED:
00054 EggTextureCollection();
00055 EggTextureCollection(const EggTextureCollection ©);
00056 EggTextureCollection &operator = (const EggTextureCollection ©);
00057 ~EggTextureCollection();
00058
00059 void clear();
00060
00061 int extract_textures(EggGroupNode *node);
00062
00063 bool is_empty() const;
00064 int get_num_textures() const;
00065 EggTexture *get_texture(int index) const;
00066 MAKE_SEQ(get_textures, get_num_textures, get_texture);
00067
00068 public:
00069 EggGroupNode::iterator insert_textures(EggGroupNode *node);
00070 EggGroupNode::iterator insert_textures(EggGroupNode *node, EggGroupNode::iterator position);
00071
00072 PUBLISHED:
00073 int find_used_textures(EggNode *node);
00074 void remove_unused_textures(EggNode *node);
00075
00076 int collapse_equivalent_textures(int eq, EggGroupNode *node);
00077 int collapse_equivalent_textures(int eq, TextureReplacement &removed);
00078 static void replace_textures(EggGroupNode *node,
00079 const TextureReplacement &replace);
00080
00081 void uniquify_trefs();
00082 void sort_by_tref();
00083 void sort_by_basename();
00084
00085 public:
00086
00087
00088 INLINE iterator begin() const;
00089 INLINE iterator end() const;
00090 INLINE bool empty() const;
00091
00092 PUBLISHED:
00093 INLINE EggTexture *operator [](size_type n) const;
00094 INLINE size_type size() const;
00095
00096 bool add_texture(EggTexture *texture);
00097 bool remove_texture(EggTexture *texture);
00098
00099
00100
00101
00102
00103 EggTexture *create_unique_texture(const EggTexture ©, int eq);
00104
00105
00106 EggTexture *find_tref(const string &tref_name) const;
00107
00108
00109 EggTexture *find_filename(const Filename &filename) const;
00110
00111 private:
00112 Textures _textures;
00113 OrderedTextures _ordered_textures;
00114 };
00115
00116 #include "eggTextureCollection.I"
00117
00118 #endif