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