00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015 #ifndef TEXTUREPROPERTIES_H
00016 #define TEXTUREPROPERTIES_H
00017
00018 #include "pandatoolbase.h"
00019
00020 #include "eggTexture.h"
00021 #include "typedWritable.h"
00022
00023 class PNMFileType;
00024 class FactoryParams;
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034 class TextureProperties : public TypedWritable {
00035 public:
00036 TextureProperties();
00037 TextureProperties(const TextureProperties ©);
00038 void operator = (const TextureProperties ©);
00039
00040 void clear_basic();
00041
00042 bool has_num_channels() const;
00043 int get_num_channels() const;
00044 void set_num_channels(int num_channels);
00045 void force_grayscale();
00046 void force_nonalpha();
00047 bool uses_alpha() const;
00048
00049 string get_string() const;
00050 void update_properties(const TextureProperties &other);
00051 void fully_define();
00052
00053 void update_egg_tex(EggTexture *egg_tex) const;
00054 bool egg_properties_match(const TextureProperties &other) const;
00055
00056 bool operator < (const TextureProperties &other) const;
00057 bool operator == (const TextureProperties &other) const;
00058 bool operator != (const TextureProperties &other) const;
00059
00060 EggTexture::Format _format;
00061 bool _force_format;
00062 bool _generic_format;
00063 bool _keep_format;
00064 EggTexture::FilterType _minfilter, _magfilter;
00065 EggTexture::QualityLevel _quality_level;
00066 int _anisotropic_degree;
00067 PNMFileType *_color_type;
00068 PNMFileType *_alpha_type;
00069
00070 private:
00071 static string get_format_string(EggTexture::Format format);
00072 static string get_filter_string(EggTexture::FilterType filter_type);
00073 static string get_anisotropic_degree_string(int aniso_degree);
00074 static string get_quality_level_string(EggTexture::QualityLevel quality_level);
00075 static string get_type_string(PNMFileType *color_type,
00076 PNMFileType *alpha_type);
00077
00078 static EggTexture::Format union_format(EggTexture::Format a,
00079 EggTexture::Format b);
00080
00081 static EggTexture::FilterType union_filter(EggTexture::FilterType a,
00082 EggTexture::FilterType b);
00083 static EggTexture::QualityLevel union_quality_level(EggTexture::QualityLevel a,
00084 EggTexture::QualityLevel b);
00085
00086 bool _got_num_channels;
00087 int _num_channels;
00088 int _effective_num_channels;
00089
00090
00091 public:
00092 static void register_with_read_factory();
00093 virtual void write_datagram(BamWriter *writer, Datagram &datagram);
00094 virtual int complete_pointers(TypedWritable **p_list,
00095 BamReader *manager);
00096
00097 protected:
00098 static TypedWritable *make_TextureProperties(const FactoryParams ¶ms);
00099
00100 public:
00101 void fillin(DatagramIterator &scan, BamReader *manager);
00102
00103 public:
00104 static TypeHandle get_class_type() {
00105 return _type_handle;
00106 }
00107 static void init_type() {
00108 TypedWritable::init_type();
00109 register_type(_type_handle, "TextureProperties",
00110 TypedWritable::get_class_type());
00111 }
00112 virtual TypeHandle get_type() const {
00113 return get_class_type();
00114 }
00115
00116 private:
00117 static TypeHandle _type_handle;
00118 };
00119
00120 #endif
00121