34 _real_world_size_u = 0;
35 _real_world_size_v = 0;
38 _file_format = FF_none;
39 _min_filter = MN_point;
40 _mag_filter = MG_point;
42 _repeat_u = RT_repeat;
43 _repeat_v = RT_repeat;
47 _env_type = ET_modulate;
48 _intensity_is_alpha =
false;
49 _float_real_world_size_u = 0.0;
50 _float_real_world_size_v = 0.0;
51 _imported_origin_code = 0;
52 _kernel_version = 1520;
53 _internal_format = IF_default;
54 _external_format = EF_default;
55 _use_mipmap_kernel =
false;
56 memset(_mipmap_kernel, 0,
sizeof(_mipmap_kernel));
57 _use_lod_scale =
false;
58 memset(_lod_scale, 0,
sizeof(_lod_scale));
60 _mag_filter_alpha = MG_point;
61 _mag_filter_color = MG_point;
62 _lambert_conic_central_meridian = 0.0;
63 _lambert_conic_upper_latitude = 0.0;
64 _lambert_conic_lower_latitude = 0.0;
72 _tile_lower_left_u = 0.0;
73 _tile_lower_left_v = 0.0;
74 _tile_upper_right_u = 0.0;
75 _tile_upper_right_v = 0.0;
76 _projection = PT_flat_earth;
77 _earth_model = EM_wgs84;
79 _image_origin = IO_lower_left;
80 _geospecific_points_units = PU_degrees;
81 _geospecific_hemisphere = H_southern;
102 return _converted_filename;
110 _converted_filename = filename;
127 return Filename::binary_filename(texture_filename +
".attr");
141 return FE_could_not_open;
145 attr.seekg(0, std::ios::end);
147 return FE_read_error;
149 std::streampos length = attr.tellg();
151 char *buffer =
new char[length];
153 attr.seekg(0, std::ios::beg);
154 attr.read(buffer, length);
156 return FE_read_error;
162 return unpack_attr(datagram);
181 FltError result = pack_attr(datagram);
182 if (result != FE_ok) {
189 return FE_could_not_open;
194 return FE_write_error;
206 if (!FltRecord::extract_record(reader)) {
210 nassertr(reader.
get_opcode() == FO_texture,
false);
213 if (_header->get_flt_version() < 1420) {
238 if (!FltRecord::build_record(writer)) {
250 if (_header->get_auto_attr_update() == FltHeader::AU_always ||
251 (_header->get_auto_attr_update() == FltHeader::AU_if_missing &&
264 FltError FltTexture::
265 unpack_attr(
const Datagram &datagram) {
291 _internal_format = (InternalFormat)iterator.
get_be_int32();
292 _external_format = (ExternalFormat)iterator.
get_be_int32();
295 for (i = 0; i < 8; i++) {
299 for (i = 0; i < 8; i++) {
304 _mag_filter_alpha = (Magnification)iterator.
get_be_int32();
305 _mag_filter_color = (Magnification)iterator.
get_be_int32();
327 _geospecific_points_units = (PointsUnits)iterator.
get_be_int32();
328 _geospecific_hemisphere = (Hemisphere)iterator.
get_be_int32();
339 _geospecific_control_points.clear();
341 if (num_points > 0) {
344 while (num_points > 0) {
345 GeospecificControlPoint gcp;
355 while (num_defs > 0) {
373 FltError FltTexture::
374 pack_attr(
Datagram &datagram)
const {
402 for (i = 0; i < 8; i++) {
406 for (i = 0; i < 8; i++) {
444 datagram.
add_be_int32(_geospecific_control_points.size());
445 if (!_geospecific_control_points.empty()) {
447 GeospecificControlPoints::const_iterator pi;
448 for (pi = _geospecific_control_points.begin();
449 pi != _geospecific_control_points.end();
451 const GeospecificControlPoint &gcp = (*pi);
461 SubtextureDefs::const_iterator di;
462 for (di = _subtexture_defs.begin();
463 di != _subtexture_defs.end();
465 const SubtextureDef &def = (*di);