Panda3D
 All Classes Functions Variables Enumerations
fltTexture.h
00001 // Filename: fltTexture.h
00002 // Created by:  drose (25Aug00)
00003 //
00004 ////////////////////////////////////////////////////////////////////
00005 //
00006 // PANDA 3D SOFTWARE
00007 // Copyright (c) Carnegie Mellon University.  All rights reserved.
00008 //
00009 // All use of this software is subject to the terms of the revised BSD
00010 // license.  You should have received a copy of this license along
00011 // with this source code in a file named "LICENSE."
00012 //
00013 ////////////////////////////////////////////////////////////////////
00014 
00015 #ifndef FLTTEXTURE_H
00016 #define FLTTEXTURE_H
00017 
00018 #include "pandatoolbase.h"
00019 
00020 #include "fltRecord.h"
00021 
00022 #include "filename.h"
00023 #include "luse.h"
00024 
00025 ////////////////////////////////////////////////////////////////////
00026 //       Class : FltTexture
00027 // Description : Represents a single texture in the texture palette.
00028 ////////////////////////////////////////////////////////////////////
00029 class FltTexture : public FltRecord {
00030 public:
00031   FltTexture(FltHeader *header);
00032 
00033   virtual void apply_converted_filenames();
00034 
00035   string _orig_filename;
00036   Filename _converted_filename;
00037   int _pattern_index;
00038   int _x_location;
00039   int _y_location;
00040 
00041   Filename get_texture_filename() const;
00042   void set_texture_filename(const Filename &filename);
00043   Filename get_attr_filename() const;
00044   FltError read_attr_data();
00045   FltError write_attr_data() const;
00046   FltError write_attr_data(Filename attr_filename) const;
00047 
00048   // The remaining fields are from the attr file.
00049   enum FileFormat {
00050     FF_none             = -1,
00051     FF_att_8_pattern    = 0,
00052     FF_att_8_template   = 1,
00053     FF_sgi_i            = 2,
00054     FF_sgi_ia           = 3,
00055     FF_sgi_rgb          = 4,
00056     FF_sgi_rgba         = 5
00057   };
00058 
00059   enum Minification {
00060     MN_point            = 0,
00061     MN_bilinear         = 1,
00062     MN_OB_mipmap        = 2,  // obsolete
00063     MN_mipmap_point     = 3,
00064     MN_mipmap_linear    = 4,
00065     MN_mipmap_bilinear  = 5,
00066     MN_mipmap_trilinear = 6,
00067     MN_bicubic          = 8,
00068     MN_bilinear_gequal  = 9,
00069     MN_bilinear_lequal  = 10,
00070     MN_bicubic_gequal   = 11,
00071     MN_bicubic_lequal   = 12
00072   };
00073 
00074   enum Magnification {
00075     MG_point            = 0,
00076     MG_bilinear         = 1,
00077     MG_bicubic          = 3,
00078     MG_sharpen          = 4,
00079     MG_add_detail       = 5,
00080     MG_modulate_detail  = 6,
00081     MG_bilinear_gequal  = 7,
00082     MG_bilinear_lequal  = 8,
00083     MG_bicubic_gequal   = 9,
00084     MG_bicubic_lequal   = 10
00085   };
00086 
00087   enum RepeatType {
00088     RT_repeat           = 0,
00089     RT_clamp            = 1
00090   };
00091 
00092   enum EnvironmentType {
00093     ET_modulate         = 0,
00094     ET_blend            = 1,
00095     ET_decal            = 2,
00096     ET_color            = 3
00097   };
00098 
00099   enum InternalFormat {
00100     IF_default          = 0,
00101     IF_i_12a_4          = 1,
00102     IF_ia_8             = 2,
00103     IF_rgb_5            = 3,
00104     IF_rgba_4           = 4,
00105     IF_ia_12            = 5,
00106     IF_rgba_8           = 6,
00107     IF_rgba_12          = 7,
00108     IF_i_16             = 8,  // shadow mode only
00109     IF_rgb_12           = 9
00110   };
00111 
00112   enum ExternalFormat {
00113     EF_default          = 0,
00114     EF_pack_8           = 1,
00115     EF_pack_16          = 2
00116   };
00117 
00118   enum ProjectionType {
00119     PT_flat_earth       = 0,
00120     PT_lambert          = 3,
00121     PT_utm              = 4,
00122     PT_undefined        = 7
00123   };
00124 
00125   enum EarthModel {
00126     EM_wgs84            = 0,
00127     EM_wgs72            = 1,
00128     EM_bessel           = 2,
00129     EM_clarke_1866      = 3,
00130     EM_nad27            = 4
00131   };
00132 
00133   enum ImageOrigin {
00134     IO_lower_left       = 0,
00135     IO_upper_left       = 1
00136   };
00137 
00138   enum PointsUnits {
00139     PU_degrees          = 0,
00140     PU_meters           = 1,
00141     PU_pixels           = 2
00142   };
00143 
00144   enum Hemisphere {
00145     H_southern          = 0,
00146     H_northern          = 1,
00147   };
00148 
00149   struct LODScale {
00150     PN_stdfloat _lod;
00151     PN_stdfloat _scale;
00152   };
00153 
00154   struct GeospecificControlPoint {
00155     LPoint2d _uv;
00156     LPoint2d _real_earth;
00157   };
00158 
00159   typedef pvector<GeospecificControlPoint> GeospecificControlPoints;
00160 
00161   struct SubtextureDef {
00162     string _name;
00163     int _left;
00164     int _bottom;
00165     int _right;
00166     int _top;
00167   };
00168   typedef pvector<SubtextureDef> SubtextureDefs;
00169 
00170   int _num_texels_u;
00171   int _num_texels_v;
00172   int _real_world_size_u;
00173   int _real_world_size_v;
00174   int _up_vector_x;
00175   int _up_vector_y;
00176   FileFormat _file_format;
00177   Minification _min_filter;
00178   Magnification _mag_filter;
00179   RepeatType _repeat;
00180   RepeatType _repeat_u;
00181   RepeatType _repeat_v;
00182   int _modify_flag;
00183   int _x_pivot_point;
00184   int _y_pivot_point;
00185   EnvironmentType _env_type;
00186   bool _intensity_is_alpha; // if true, a one-channel image is actually
00187                             // an alpha image, not an intensity image.
00188   double _float_real_world_size_u;
00189   double _float_real_world_size_v;
00190   int _imported_origin_code;
00191   int _kernel_version;
00192   InternalFormat _internal_format;
00193   ExternalFormat _external_format;
00194   bool _use_mipmap_kernel;
00195   PN_stdfloat _mipmap_kernel[8];
00196   bool _use_lod_scale;
00197   LODScale _lod_scale[8];
00198   PN_stdfloat _clamp;
00199   Magnification _mag_filter_alpha;
00200   Magnification _mag_filter_color;
00201   double _lambert_conic_central_meridian;
00202   double _lambert_conic_upper_latitude;
00203   double _lambert_conic_lower_latitude;
00204   bool _use_detail;
00205   int _detail_j;
00206   int _detail_k;
00207   int _detail_m;
00208   int _detail_n;
00209   int _detail_scramble;
00210   bool _use_tile;
00211   PN_stdfloat _tile_lower_left_u;
00212   PN_stdfloat _tile_lower_left_v;
00213   PN_stdfloat _tile_upper_right_u;
00214   PN_stdfloat _tile_upper_right_v;
00215   ProjectionType _projection;
00216   EarthModel _earth_model;
00217   int _utm_zone;
00218   ImageOrigin _image_origin;
00219   PointsUnits _geospecific_points_units;
00220   Hemisphere _geospecific_hemisphere;
00221   string _comment;
00222   int _file_version;
00223   GeospecificControlPoints _geospecific_control_points;
00224   SubtextureDefs _subtexture_defs;
00225 
00226 protected:
00227   virtual bool extract_record(FltRecordReader &reader);
00228   virtual bool build_record(FltRecordWriter &writer) const;
00229 
00230 private:
00231   FltError unpack_attr(const Datagram &datagram);
00232   FltError pack_attr(Datagram &datagram) const;
00233 
00234 public:
00235   virtual TypeHandle get_type() const {
00236     return get_class_type();
00237   }
00238   virtual TypeHandle force_init_type() {init_type(); return get_class_type();}
00239   static TypeHandle get_class_type() {
00240     return _type_handle;
00241   }
00242   static void init_type() {
00243     FltRecord::init_type();
00244     register_type(_type_handle, "FltTexture",
00245                   FltRecord::get_class_type());
00246   }
00247 
00248 private:
00249   static TypeHandle _type_handle;
00250 
00251   friend class FltHeader;
00252 };
00253 
00254 #endif
00255 
00256 
 All Classes Functions Variables Enumerations