28f9b71dd4
Changes to existing files: ReaderWriter.cpp -- to support writeNode() of course. ReaderWriterATTR.cpp -- to support writeObject -- we write .attr files for textures, if they don't already exist. AttrData.cpp/.h -- Minor fixes. CMakeLists.txt -- to include the new files in the build." From Robert Osfield, port to non Windows platforms just required fixing of header capitilization errors that windows lets through the net due to having a case insensitive file system.
341 lines
16 KiB
C++
341 lines
16 KiB
C++
/* -*-c++-*- OpenSceneGraph - Copyright (C) 1998-2006 Robert Osfield
|
|
*
|
|
* This library is open source and may be redistributed and/or modified under
|
|
* the terms of the OpenSceneGraph Public License (OSGPL) version 0.0 or
|
|
* (at your option) any later version. The full license is in LICENSE file
|
|
* included with this distribution, and on the openscenegraph.org website.
|
|
*
|
|
* This library is distributed in the hope that it will be useful,
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
* OpenSceneGraph Public License for more details.
|
|
*/
|
|
|
|
//
|
|
// OpenFlight® loader for OpenSceneGraph
|
|
//
|
|
// Copyright (C) 2005-2007 Brede Johansen
|
|
//
|
|
|
|
#ifndef FLT_ATTRDATA_H
|
|
#define FLT_ATTRDATA_H
|
|
|
|
#include <string>
|
|
#include <osg/Object>
|
|
#include "Types.h"
|
|
|
|
namespace flt {
|
|
|
|
|
|
class AttrData : public osg::Object
|
|
{
|
|
public :
|
|
|
|
AttrData();
|
|
|
|
AttrData(const AttrData& attr, const osg::CopyOp& copyop=osg::CopyOp::SHALLOW_COPY);
|
|
|
|
META_Object(flt,AttrData);
|
|
|
|
|
|
enum MinFilterMode {
|
|
MIN_FILTER_POINT = 0,
|
|
MIN_FILTER_BILINEAR = 1,
|
|
MIN_FILTER_MIPMAP = 2, // (Obsolete)
|
|
MIN_FILTER_MIPMAP_POINT = 3,
|
|
MIN_FILTER_MIPMAP_LINEAR = 4,
|
|
MIN_FILTER_MIPMAP_BILINEAR = 5,
|
|
MIN_FILTER_MIPMAP_TRILINEAR = 6,
|
|
MIN_FILTER_NONE = 7,
|
|
MIN_FILTER_BICUBIC = 8,
|
|
MIN_FILTER_BILINEAR_GEQUAL = 9,
|
|
MIN_FILTER_BILINEAR_LEQUAL = 10,
|
|
MIN_FILTER_BICUBIC_GEQUAL = 11,
|
|
MIN_FILTER_BICUBIC_LEQUAL = 12
|
|
};
|
|
|
|
enum MagFilterMode {
|
|
MAG_FILTER_POINT = 0,
|
|
MAG_FILTER_BILINEAR = 1,
|
|
MAG_FILTER_NONE = 2,
|
|
MAG_FILTER_BICUBIC = 3,
|
|
MAG_FILTER_SHARPEN = 4,
|
|
MAG_FILTER_ADD_DETAIL = 5,
|
|
MAG_FILTER_MODULATE_DETAIL = 6,
|
|
MAG_FILTER_BILINEAR_GEQUAL = 7,
|
|
MAG_FILTER_BILINEAR_LEQUAL = 8,
|
|
MAG_FILTER_BICUBIC_GEQUAL = 9,
|
|
MAG_FILTER_BICUBIC_LEQUAL = 10
|
|
};
|
|
|
|
enum WrapMode {
|
|
WRAP_REPEAT = 0,
|
|
WRAP_CLAMP = 1,
|
|
WRAP_NONE = 3,
|
|
WRAP_MIRRORED_REPEAT = 4
|
|
};
|
|
|
|
enum TexEnvMode {
|
|
TEXENV_MODULATE = 0,
|
|
TEXENV_BLEND = 1,
|
|
TEXENV_DECAL = 2,
|
|
TEXENV_COLOR = 3,
|
|
TEXENV_ADD = 4
|
|
};
|
|
|
|
enum Projection {
|
|
PROJECTION_FLAT = 0,
|
|
PROJECTION_LAMBERT_CONIC = 3,
|
|
PROJECTION_UTM = 4,
|
|
PROJECTION_UNDEFINED = 7
|
|
};
|
|
|
|
enum Datum {
|
|
DATUM_WGS84 = 0,
|
|
DATUM_WGS72 = 1,
|
|
DATUM_BESSEL = 2,
|
|
DATUM_CLARK_1866 = 3,
|
|
DATUM_NAD27 = 4
|
|
};
|
|
|
|
enum InternalFormat {
|
|
INTERNAL_FORMAT_DEFAULT = 0,
|
|
INTERNAL_FORMAT_TX_I_12A_4 = 1,
|
|
INTERNAL_FORMAT_TX_IA_8 = 2,
|
|
INTERNAL_FORMAT_TX_RGB_5 = 3,
|
|
INTERNAL_FORMAT_TX_RGBA_4 = 4,
|
|
INTERNAL_FORMAT_TX_IA_12 = 5,
|
|
INTERNAL_FORMAT_TX_RGBA_8 = 6,
|
|
INTERNAL_FORMAT_TX_RGBA_12 = 7,
|
|
INTERNAL_FORMAT_TX_I_16 = 8,
|
|
INTERNAL_FORMAT_TX_RGB_12 = 9
|
|
};
|
|
|
|
int32 texels_u; // Number of texels in u direction
|
|
int32 texels_v; // Number of texels in v direction
|
|
int32 direction_u; // Real world size u direction
|
|
int32 direction_v; // Real world size v direction
|
|
int32 x_up; // x component of up vector
|
|
int32 y_up; // y component of up vector
|
|
int32 fileFormat; // File format type
|
|
// -1 Not used
|
|
// 0 AT&T image 8 pattern
|
|
// 1 AT&T image 8 template
|
|
// 2 SGI intensity modulation
|
|
// 3 SGI intensity w/ alpha
|
|
// 4 SGI RGB
|
|
// 5 SGI RGB w/ alpha
|
|
int32 minFilterMode; // Minification filter type
|
|
// 0 - TX_POINT
|
|
// 1 - TX_BILINEAR
|
|
// 2 - TX_MIPMAP (Obsolete)
|
|
// 3 - TX_MIPMAP_POINT
|
|
// 4 - TX_MIPMAP_LINEAR
|
|
// 5 - TX_MIPMAP_BILINEAR
|
|
// 6 - TX_MIPMAP_TRILINEAR
|
|
// 7 - None
|
|
// 8 - TX_BICUBIC
|
|
// 9 - TX_BILINEAR_GEQUAL
|
|
// 10 - TX_BILINEAR_LEQUAL
|
|
// 11 - TX_BICUBIC_GEQUAL
|
|
// 12 - TX_BICUBIC_LEQUAL
|
|
int32 magFilterMode; // Magnification filter type
|
|
// 0 - TX_POINT
|
|
// 1 - TX_BILINEAR
|
|
// 2 - None
|
|
// 3 - TX_BICUBIC
|
|
// 4 - TX_SHARPEN
|
|
// 5 - TX_ADD_DETAIL
|
|
// 6 - TX_MODULATE_DETAIL
|
|
// 7 - TX_BILINEAR_GEQUAL
|
|
// 8 - TX_BILINEAR_LEQUAL
|
|
// 9 - TX_BICUBIC_GEQUAL
|
|
// 10 - TX_BICUBIC_LEQUAL
|
|
int32 wrapMode; // Repetition type
|
|
// 0 - TX_REPEAT
|
|
// 1 - TX_CLAMP
|
|
// 2 - (Obsolete)
|
|
int32 wrapMode_u; // Repetition type in u direction (see above)
|
|
int32 wrapMode_v; // Repetition type in v direction (see above)
|
|
int32 modifyFlag; // Modify flag (for internal use)
|
|
int32 pivot_x; // x pivot point for rotating textures
|
|
int32 pivot_y; // y pivot point for rotating textures
|
|
|
|
// --------------
|
|
// v11 ends here
|
|
// --------------
|
|
|
|
int32 texEnvMode; // Environment type
|
|
// 0 - TV_MODULATE
|
|
// 1 - TV_BLEND
|
|
// 2 - TV_DECAL
|
|
// 3 - TV_COLOR
|
|
// 4 - TV_ADD
|
|
int32 intensityAsAlpha; // TRUE if intensity pattern to be loaded in alpha with white in color
|
|
// int32 spare1[8]; // 8 words of spare
|
|
float64 size_u; // Real world size u for floating point databases
|
|
float64 size_v; // Real world size v for floating point databases
|
|
int32 originCode; // Code for origin of imported texture
|
|
int32 kernelVersion; // Kernel version number
|
|
int32 intFormat; // Internal format type
|
|
// 0 - Default
|
|
// 1 - TX_I_12A_4
|
|
// 2 - TX_IA_8
|
|
// 3 - TX_RGB_5
|
|
// 4 - TX_RGBA_4
|
|
// 5 - TX_IA_12
|
|
// 6 - TX_RGBA_8
|
|
// 7 - TX_RGBA_12
|
|
// 8 - TX_I_16 (shadow mode only)
|
|
// 9 - TX_RGB_12
|
|
int32 extFormat; // External format type
|
|
// 0 - Default
|
|
// 1 - TX_PACK_8
|
|
// 2 - TX_PACK_16
|
|
int32 useMips; // TRUE if using following 8 floats for MIPMAP kernel
|
|
float32 of_mips[8]; // 8 floats for kernel of separable symmetric filter
|
|
int32 useLodScale; // Boolean if TRUE send:
|
|
float32 lod0; // LOD0 for TX_CONTROL_POINT
|
|
float32 scale0; // SCALE0 for TX_CONTROL_POINT
|
|
float32 lod1; // LOD1 for TX_CONTROL_POINT
|
|
float32 scale1; // SCALE1 for TX_CONTROL_POINT
|
|
float32 lod2; // LOD2 for TX_CONTROL_POINT
|
|
float32 scale2; // SCALE2 for TX_CONTROL_POINT
|
|
float32 lod3; // LOD3 for TX_CONTROL_POINT
|
|
float32 scale3; // SCALE3 for TX_CONTROL_POINT
|
|
float32 lod4; // LOD4 for TX_CONTROL_POINT
|
|
float32 scale4; // SCALE4 for TX_CONTROL_POINT
|
|
float32 lod5; // LOD5 for TX_CONTROL_POINT
|
|
float32 scale5; // SCALE5 for TX_CONTROL_POINT
|
|
float32 lod6; // LOD6 for TX_CONTROL_POINT
|
|
float32 scale6; // SCALE6 for TX_CONTROL_POINT
|
|
float32 lod7; // LOD7 for TX_CONTROL_POINT
|
|
float32 scale7; // SCALE7 for TX_CONTROL_POINT
|
|
|
|
float32 clamp; // Clamp
|
|
int32 magFilterAlpha; // magfilteralpha:
|
|
// 0 = TX_POINT
|
|
// 1 = TX_BILINEAR
|
|
// 2 = None
|
|
// 3 = TX_BICUBIC
|
|
// 4 = TX_SHARPEN
|
|
// 5 = TX_ADD_DETAIL
|
|
// 6 = TX_MODULATE_DETAIL
|
|
// 7 = TX_BILINEAR_GEQUAL
|
|
// 8 = TX_BILINEAR_LEQUAL
|
|
// 9 = TX_BICUBIC_GEQUAL
|
|
// 10 = TX_BIBICUBIC_LEQUAL
|
|
int32 magFilterColor; // magfiltercolor:
|
|
// 0 = TX_POINT
|
|
// 1 = TX_BILINEAR
|
|
// 2 = None
|
|
// 3 = TX_BICUBIC
|
|
// 4 = TX_SHARPEN
|
|
// 5 = TX_ADD_DETAIL
|
|
// 6 = TX_MODULATE_DETAIL
|
|
// 7 = TX_BILINEAR_GEQUAL
|
|
// 8 = TX_BILINEAR_LEQUAL
|
|
// 9 = TX_BICUBIC_GEQUAL
|
|
// 10 = TX_BIBICUBIC_LEQUAL
|
|
// float32 reserved1; // Reserved
|
|
// float32 reserved2[8]; // Reserved
|
|
float64 lambertMeridian; // Lambert conic projection central meridian
|
|
float64 lambertUpperLat; // Lambert conic projection upper latitude
|
|
float64 lambertlowerLat; // Lambert conic projection lower latitude
|
|
// float64 reserved3; // Reserved
|
|
// float32 spare2[5]; // Spare
|
|
int32 useDetail; // TRUE if using next 5 integers for detail texture
|
|
int32 txDetail_j; // J argument for TX_DETAIL
|
|
int32 txDetail_k; // K argument for TX_DETAIL
|
|
int32 txDetail_m; // M argument for TX_DETAIL
|
|
int32 txDetail_n; // N argument for TX_DETAIL
|
|
int32 txDetail_s; // Scramble argument for TX_DETAIL
|
|
int32 useTile; // TRUE if using next for floats for TX_TILE
|
|
float32 txTile_ll_u; // Lower-left u value for TX_TILE
|
|
float32 txTile_ll_v; // Lower-left v value for TX_TILE
|
|
float32 txTile_ur_u; // Upper-right u value for TX_TILE
|
|
float32 txTile_ur_v; // Upper-right v value for TX_TILE
|
|
int32 projection; // Projection
|
|
// 0 = Flat earth
|
|
// 3 = Lambert conic
|
|
// 4 = UTM
|
|
// 7 = Undefined projection
|
|
int32 earthModel; // Earth model
|
|
// 0 = WGS84
|
|
// 1 = WGS72
|
|
// 2 = Bessel
|
|
// 3 = Clark 1866
|
|
// 4 = NAD27
|
|
// int32 reserved4; // Reserved
|
|
int32 utmZone; // UTM zone
|
|
int32 imageOrigin; // Image origin
|
|
// 0 = Lower-left
|
|
// 1 = Upper-left
|
|
int32 geoUnits; // Geospecific points units
|
|
// 0 = Degrees
|
|
// 1 = Meters
|
|
// 2 = Pixels
|
|
// int32 reserved5; // Reserved
|
|
// int32 reserved6; // Reserved
|
|
int32 hemisphere; // Hemisphere for geospecific points units
|
|
// 0 = Southern
|
|
// 1 = Northern
|
|
// int32 reserved7; // Reserved
|
|
// int32 reserved8; // Reserved
|
|
// int32 spare3[149]; // Spare
|
|
// char comments[512]; // Comments
|
|
std::string comments;
|
|
// --------------
|
|
// v12 ends here
|
|
// --------------
|
|
|
|
// int32 reserved9[13]; // Reserved
|
|
int32 attrVersion; // Attribute file version number
|
|
|
|
int32 controlPoints; // Number of geospecific control points
|
|
// If the number of geospecific control points is > 0,
|
|
// the following fields are also in the attribute file:
|
|
int32 reserved10; // Reserved
|
|
#if 0
|
|
// For each geospecific control point:
|
|
{
|
|
float64 texel_u; // Texel u of geospecific control point
|
|
float64 texel_v; // Texel v of geospecific control point
|
|
float64 geoPoint[2]; // Real earth coordinate of geospecific control point
|
|
// (this value depends on the projection, earth model,
|
|
// and geospecific points units)
|
|
}
|
|
|
|
// ----------------
|
|
// v15.6 ends here
|
|
// ----------------
|
|
|
|
// After all geospecific control points are listed, the following subtexture
|
|
// information appears:
|
|
int32 subtextures; // Number of subtexture definitions contained in the
|
|
// texture attribute file
|
|
// If the number of subtexture definitions is >0,
|
|
// the following fields are repeated for each subtexture definition:
|
|
{
|
|
char name[32]; // name of subtexture definition
|
|
int32 left; // Coordinate of left edge of subtexture
|
|
// definition measured in texels.
|
|
int32 bottom; // Coordinate of bottom edge of subtexture
|
|
// definition measured in texels.
|
|
int32 right; // Coordinate of right edge of subtexture
|
|
// definition measured in texels.
|
|
int32 top; // Coordinate of top edge of subtexture
|
|
// definition measured in texels.
|
|
}
|
|
#endif
|
|
int32 numSubtextures; // # of subtextures
|
|
|
|
};
|
|
|
|
|
|
} // end namespace
|
|
|
|
#endif
|
|
|
|
|