]> de.git.xonotic.org Git - voretournament/voretournament.git/blobdiff - misc/mediasource/netradiant-src/libs/picomodel/lwo/lwo2.h
Move the netradiant and fteqcc sources
[voretournament/voretournament.git] / misc / mediasource / netradiant-src / libs / picomodel / lwo / lwo2.h
diff --git a/misc/mediasource/netradiant-src/libs/picomodel/lwo/lwo2.h b/misc/mediasource/netradiant-src/libs/picomodel/lwo/lwo2.h
new file mode 100644 (file)
index 0000000..e5b9611
--- /dev/null
@@ -0,0 +1,651 @@
+/*
+======================================================================
+lwo2.h
+
+Definitions and typedefs for LWO2 files.
+
+Ernie Wright  17 Sep 00
+====================================================================== */
+
+#ifndef LWO2_H
+#define LWO2_H
+
+/* chunk and subchunk IDs */
+
+#define LWID_(a,b,c,d) (((a)<<24)|((b)<<16)|((c)<<8)|(d))
+
+#define ID_FORM  LWID_('F','O','R','M')
+#define ID_LWO2  LWID_('L','W','O','2')
+#define ID_LWOB  LWID_('L','W','O','B')
+
+/* top-level chunks */
+#define ID_LAYR  LWID_('L','A','Y','R')
+#define ID_TAGS  LWID_('T','A','G','S')
+#define ID_PNTS  LWID_('P','N','T','S')
+#define ID_BBOX  LWID_('B','B','O','X')
+#define ID_VMAP  LWID_('V','M','A','P')
+#define ID_VMAD  LWID_('V','M','A','D')
+#define ID_POLS  LWID_('P','O','L','S')
+#define ID_PTAG  LWID_('P','T','A','G')
+#define ID_ENVL  LWID_('E','N','V','L')
+#define ID_CLIP  LWID_('C','L','I','P')
+#define ID_SURF  LWID_('S','U','R','F')
+#define ID_DESC  LWID_('D','E','S','C')
+#define ID_TEXT  LWID_('T','E','X','T')
+#define ID_ICON  LWID_('I','C','O','N')
+
+/* polygon types */
+#define ID_FACE  LWID_('F','A','C','E')
+#define ID_CURV  LWID_('C','U','R','V')
+#define ID_PTCH  LWID_('P','T','C','H')
+#define ID_MBAL  LWID_('M','B','A','L')
+#define ID_BONE  LWID_('B','O','N','E')
+
+/* polygon tags */
+#define ID_SURF  LWID_('S','U','R','F')
+#define ID_PART  LWID_('P','A','R','T')
+#define ID_SMGP  LWID_('S','M','G','P')
+
+/* envelopes */
+#define ID_PRE   LWID_('P','R','E',' ')
+#define ID_POST  LWID_('P','O','S','T')
+#define ID_KEY   LWID_('K','E','Y',' ')
+#define ID_SPAN  LWID_('S','P','A','N')
+#define ID_TCB   LWID_('T','C','B',' ')
+#define ID_HERM  LWID_('H','E','R','M')
+#define ID_BEZI  LWID_('B','E','Z','I')
+#define ID_BEZ2  LWID_('B','E','Z','2')
+#define ID_LINE  LWID_('L','I','N','E')
+#define ID_STEP  LWID_('S','T','E','P')
+
+/* clips */
+#define ID_STIL  LWID_('S','T','I','L')
+#define ID_ISEQ  LWID_('I','S','E','Q')
+#define ID_ANIM  LWID_('A','N','I','M')
+#define ID_XREF  LWID_('X','R','E','F')
+#define ID_STCC  LWID_('S','T','C','C')
+#define ID_TIME  LWID_('T','I','M','E')
+#define ID_CONT  LWID_('C','O','N','T')
+#define ID_BRIT  LWID_('B','R','I','T')
+#define ID_SATR  LWID_('S','A','T','R')
+#define ID_HUE   LWID_('H','U','E',' ')
+#define ID_GAMM  LWID_('G','A','M','M')
+#define ID_NEGA  LWID_('N','E','G','A')
+#define ID_IFLT  LWID_('I','F','L','T')
+#define ID_PFLT  LWID_('P','F','L','T')
+
+/* surfaces */
+#define ID_COLR  LWID_('C','O','L','R')
+#define ID_LUMI  LWID_('L','U','M','I')
+#define ID_DIFF  LWID_('D','I','F','F')
+#define ID_SPEC  LWID_('S','P','E','C')
+#define ID_GLOS  LWID_('G','L','O','S')
+#define ID_REFL  LWID_('R','E','F','L')
+#define ID_RFOP  LWID_('R','F','O','P')
+#define ID_RIMG  LWID_('R','I','M','G')
+#define ID_RSAN  LWID_('R','S','A','N')
+#define ID_TRAN  LWID_('T','R','A','N')
+#define ID_TROP  LWID_('T','R','O','P')
+#define ID_TIMG  LWID_('T','I','M','G')
+#define ID_RIND  LWID_('R','I','N','D')
+#define ID_TRNL  LWID_('T','R','N','L')
+#define ID_BUMP  LWID_('B','U','M','P')
+#define ID_SMAN  LWID_('S','M','A','N')
+#define ID_SIDE  LWID_('S','I','D','E')
+#define ID_CLRH  LWID_('C','L','R','H')
+#define ID_CLRF  LWID_('C','L','R','F')
+#define ID_ADTR  LWID_('A','D','T','R')
+#define ID_SHRP  LWID_('S','H','R','P')
+#define ID_LINE  LWID_('L','I','N','E')
+#define ID_LSIZ  LWID_('L','S','I','Z')
+#define ID_ALPH  LWID_('A','L','P','H')
+#define ID_AVAL  LWID_('A','V','A','L')
+#define ID_GVAL  LWID_('G','V','A','L')
+#define ID_BLOK  LWID_('B','L','O','K')
+
+/* texture layer */
+#define ID_TYPE  LWID_('T','Y','P','E')
+#define ID_CHAN  LWID_('C','H','A','N')
+#define ID_NAME  LWID_('N','A','M','E')
+#define ID_ENAB  LWID_('E','N','A','B')
+#define ID_OPAC  LWID_('O','P','A','C')
+#define ID_FLAG  LWID_('F','L','A','G')
+#define ID_PROJ  LWID_('P','R','O','J')
+#define ID_STCK  LWID_('S','T','C','K')
+#define ID_TAMP  LWID_('T','A','M','P')
+
+/* texture coordinates */
+#define ID_TMAP  LWID_('T','M','A','P')
+#define ID_AXIS  LWID_('A','X','I','S')
+#define ID_CNTR  LWID_('C','N','T','R')
+#define ID_SIZE  LWID_('S','I','Z','E')
+#define ID_ROTA  LWID_('R','O','T','A')
+#define ID_OREF  LWID_('O','R','E','F')
+#define ID_FALL  LWID_('F','A','L','L')
+#define ID_CSYS  LWID_('C','S','Y','S')
+
+/* image map */
+#define ID_IMAP  LWID_('I','M','A','P')
+#define ID_IMAG  LWID_('I','M','A','G')
+#define ID_WRAP  LWID_('W','R','A','P')
+#define ID_WRPW  LWID_('W','R','P','W')
+#define ID_WRPH  LWID_('W','R','P','H')
+#define ID_VMAP  LWID_('V','M','A','P')
+#define ID_AAST  LWID_('A','A','S','T')
+#define ID_PIXB  LWID_('P','I','X','B')
+
+/* procedural */
+#define ID_PROC  LWID_('P','R','O','C')
+#define ID_COLR  LWID_('C','O','L','R')
+#define ID_VALU  LWID_('V','A','L','U')
+#define ID_FUNC  LWID_('F','U','N','C')
+#define ID_FTPS  LWID_('F','T','P','S')
+#define ID_ITPS  LWID_('I','T','P','S')
+#define ID_ETPS  LWID_('E','T','P','S')
+
+/* gradient */
+#define ID_GRAD  LWID_('G','R','A','D')
+#define ID_GRST  LWID_('G','R','S','T')
+#define ID_GREN  LWID_('G','R','E','N')
+#define ID_PNAM  LWID_('P','N','A','M')
+#define ID_INAM  LWID_('I','N','A','M')
+#define ID_GRPT  LWID_('G','R','P','T')
+#define ID_FKEY  LWID_('F','K','E','Y')
+#define ID_IKEY  LWID_('I','K','E','Y')
+
+/* shader */
+#define ID_SHDR  LWID_('S','H','D','R')
+#define ID_DATA  LWID_('D','A','T','A')
+
+
+/* generic linked list */
+
+typedef struct st_lwNode {
+   struct st_lwNode *next, *prev;
+   void *data;
+} lwNode;
+
+
+/* plug-in reference */
+
+typedef struct st_lwPlugin {
+   struct st_lwPlugin *next, *prev;
+   char          *ord;
+   char          *name;
+   int            flags;
+   void          *data;
+} lwPlugin;
+
+
+/* envelopes */
+
+typedef struct st_lwKey {
+   struct st_lwKey *next, *prev;
+   float          value;
+   float          time;
+   unsigned int   shape;               /* ID_TCB, ID_BEZ2, etc. */
+   float          tension;
+   float          continuity;
+   float          bias;
+   float          param[ 4 ];
+} lwKey;
+
+typedef struct st_lwEnvelope {
+   struct st_lwEnvelope *next, *prev;
+   int            index;
+   int            type;
+   char          *name;
+   lwKey         *key;                 /* linked list of keys */
+   int            nkeys;
+   int            behavior[ 2 ];       /* pre and post (extrapolation) */
+   lwPlugin      *cfilter;             /* linked list of channel filters */
+   int            ncfilters;
+} lwEnvelope;
+
+#define BEH_RESET      0
+#define BEH_CONSTANT   1
+#define BEH_REPEAT     2
+#define BEH_OSCILLATE  3
+#define BEH_OFFSET     4
+#define BEH_LINEAR     5
+
+
+/* values that can be enveloped */
+
+typedef struct st_lwEParam {
+   float          val;
+   int            eindex;
+} lwEParam;
+
+typedef struct st_lwVParam {
+   float          val[ 3 ];
+   int            eindex;
+} lwVParam;
+
+
+/* clips */
+
+typedef struct st_lwClipStill {
+   char          *name;
+} lwClipStill;
+
+typedef struct st_lwClipSeq {
+   char          *prefix;              /* filename before sequence digits */
+   char          *suffix;              /* after digits, e.g. extensions */
+   int            digits;
+   int            flags;
+   int            offset;
+   int            start;
+   int            end;
+} lwClipSeq;
+
+typedef struct st_lwClipAnim {
+   char          *name;
+   char          *server;              /* anim loader plug-in */
+   void          *data;
+} lwClipAnim;
+
+typedef struct st_lwClipXRef {
+   char          *string;
+   int            index;
+   struct st_lwClip *clip;
+} lwClipXRef;
+
+typedef struct st_lwClipCycle {
+   char          *name;
+   int            lo;
+   int            hi;
+} lwClipCycle;
+
+typedef struct st_lwClip {
+   struct st_lwClip *next, *prev;
+   int            index;
+   unsigned int   type;                /* ID_STIL, ID_ISEQ, etc. */
+   union {
+      lwClipStill    still;
+      lwClipSeq      seq;
+      lwClipAnim     anim;
+      lwClipXRef     xref;
+      lwClipCycle    cycle;
+   }              source;
+   float          start_time;
+   float          duration;
+   float          frame_rate;
+   lwEParam       contrast;
+   lwEParam       brightness;
+   lwEParam       saturation;
+   lwEParam       hue;
+   lwEParam       gamma;
+   int            negative;
+   lwPlugin      *ifilter;             /* linked list of image filters */
+   int            nifilters;
+   lwPlugin      *pfilter;             /* linked list of pixel filters */
+   int            npfilters;
+} lwClip;
+
+
+/* textures */
+
+typedef struct st_lwTMap {
+   lwVParam       size;
+   lwVParam       center;
+   lwVParam       rotate;
+   lwVParam       falloff;
+   int            fall_type;
+   char          *ref_object;
+   int            coord_sys;
+} lwTMap;
+
+typedef struct st_lwImageMap {
+   int            cindex;
+   int            projection;
+   char          *vmap_name;
+   int            axis;
+   int            wrapw_type;
+   int            wraph_type;
+   lwEParam       wrapw;
+   lwEParam       wraph;
+   float          aa_strength;
+   int            aas_flags;
+   int            pblend;
+   lwEParam       stck;
+   lwEParam       amplitude;
+} lwImageMap;
+
+#define PROJ_PLANAR       0
+#define PROJ_CYLINDRICAL  1
+#define PROJ_SPHERICAL    2
+#define PROJ_CUBIC        3
+#define PROJ_FRONT        4
+
+#define WRAP_NONE    0
+#define WRAP_EDGE    1
+#define WRAP_REPEAT  2
+#define WRAP_MIRROR  3
+
+typedef struct st_lwProcedural {
+   int            axis;
+   float          value[ 3 ];
+   char          *name;
+   void          *data;
+} lwProcedural;
+
+typedef struct st_lwGradKey {
+   struct st_lwGradKey *next, *prev;
+   float          value;
+   float          rgba[ 4 ];
+} lwGradKey;
+
+typedef struct st_lwGradient {
+   char          *paramname;
+   char          *itemname;
+   float          start;
+   float          end;
+   int            repeat;
+   lwGradKey     *key;                 /* array of gradient keys */
+   short         *ikey;                /* array of interpolation codes */
+} lwGradient;
+
+typedef struct st_lwTexture {
+   struct st_lwTexture *next, *prev;
+   char          *ord;
+   unsigned int   type;
+   unsigned int   chan;
+   lwEParam       opacity;
+   short          opac_type;
+   short          enabled;
+   short          negative;
+   short          axis;
+   union {
+      lwImageMap     imap;
+      lwProcedural   proc;
+      lwGradient     grad;
+   }              param;
+   lwTMap         tmap;
+} lwTexture;
+
+
+/* values that can be textured */
+
+typedef struct st_lwTParam {
+   float          val;
+   int            eindex;
+   lwTexture     *tex;                 /* linked list of texture layers */
+} lwTParam;
+
+typedef struct st_lwCParam {
+   float          rgb[ 3 ];
+   int            eindex;
+   lwTexture     *tex;                 /* linked list of texture layers */
+} lwCParam;
+
+
+/* surfaces */
+
+typedef struct st_lwGlow {
+   short          enabled;
+   short          type;
+   lwEParam       intensity;
+   lwEParam       size;
+} Glow;
+
+typedef struct st_lwRMap {
+   lwTParam       val;
+   int            options;
+   int            cindex;
+   float          seam_angle;
+} lwRMap;
+
+typedef struct st_lwLine {
+   short          enabled;
+   unsigned short flags;
+   lwEParam       size;
+} lwLine;
+
+typedef struct st_lwSurface {
+   struct st_lwSurface *next, *prev;
+   char          *name;
+   char          *srcname;
+   lwCParam       color;
+   lwTParam       luminosity;
+   lwTParam       diffuse;
+   lwTParam       specularity;
+   lwTParam       glossiness;
+   lwRMap         reflection;
+   lwRMap         transparency;
+   lwTParam       eta;
+   lwTParam       translucency;
+   lwTParam       bump;
+   float          smooth;
+   int            sideflags;
+   float          alpha;
+   int            alpha_mode;
+   lwEParam       color_hilite;
+   lwEParam       color_filter;
+   lwEParam       add_trans;
+   lwEParam       dif_sharp;
+   lwEParam       glow;
+   lwLine         line;
+   lwPlugin      *shader;              /* linked list of shaders */
+   int            nshaders;
+} lwSurface;
+
+
+/* vertex maps */
+
+typedef struct st_lwVMap {
+   struct st_lwVMap *next, *prev;
+   char          *name;
+   unsigned int   type;
+   int            dim;
+   int            nverts;
+   int            perpoly;
+   int           *vindex;              /* array of point indexes */
+   int           *pindex;              /* array of polygon indexes */
+   float        **val;
+} lwVMap;
+
+typedef struct st_lwVMapPt {
+   lwVMap        *vmap;
+   int            index;               /* vindex or pindex element */
+} lwVMapPt;
+
+
+/* points and polygons */
+
+typedef struct st_lwPoint {
+   float          pos[ 3 ];
+   int            npols;               /* number of polygons sharing the point */
+   int           *pol;                 /* array of polygon indexes */
+   int            nvmaps;
+   lwVMapPt      *vm;                  /* array of vmap references */
+} lwPoint;
+
+typedef struct st_lwPolVert {
+   int            index;               /* index into the point array */
+   float          norm[ 3 ];
+   int            nvmaps;
+   lwVMapPt      *vm;                  /* array of vmap references */
+} lwPolVert;
+
+typedef struct st_lwPolygon {
+   lwSurface     *surf;
+   int            part;                /* part index */
+   int            smoothgrp;           /* smoothing group */
+   int            flags;
+   unsigned int   type;
+   float          norm[ 3 ];
+   int            nverts;
+   lwPolVert     *v;                   /* array of vertex records */
+} lwPolygon;
+
+typedef struct st_lwPointList {
+   int            count;
+   int            offset;              /* only used during reading */
+   lwPoint       *pt;                  /* array of points */
+} lwPointList;
+
+typedef struct st_lwPolygonList {
+   int            count;
+   int            offset;              /* only used during reading */
+   int            vcount;              /* total number of vertices */
+   int            voffset;             /* only used during reading */
+   lwPolygon     *pol;                 /* array of polygons */
+} lwPolygonList;
+
+
+/* geometry layers */
+
+typedef struct st_lwLayer {
+   struct st_lwLayer *next, *prev;
+   char          *name;
+   int            index;
+   int            parent;
+   int            flags;
+   float          pivot[ 3 ];
+   float          bbox[ 6 ];
+   lwPointList    point;
+   lwPolygonList  polygon;
+   int            nvmaps;
+   lwVMap        *vmap;                /* linked list of vmaps */
+} lwLayer;
+
+
+/* tag strings */
+
+typedef struct st_lwTagList {
+   int            count;
+   int            offset;              /* only used during reading */
+   char         **tag;                 /* array of strings */
+} lwTagList;
+
+
+/* an object */
+
+typedef struct st_lwObject {
+   lwLayer       *layer;               /* linked list of layers */
+   lwEnvelope    *env;                 /* linked list of envelopes */
+   lwClip        *clip;                /* linked list of clips */
+   lwSurface     *surf;                /* linked list of surfaces */
+   lwTagList      taglist;
+   int            nlayers;
+   int            nenvs;
+   int            nclips;
+   int            nsurfs;
+} lwObject;
+
+
+/* lwo2.c */
+
+void lwFreeLayer( lwLayer *layer );
+void lwFreeObject( lwObject *object );
+lwObject *lwGetObject( const char *filename, picoMemStream_t *fp, unsigned int *failID, int *failpos );
+int lwValidateObject( const char *filename, picoMemStream_t *fp, unsigned int *failID, int *failpos );
+
+/* pntspols.c */
+
+void lwFreePoints( lwPointList *point );
+void lwFreePolygons( lwPolygonList *plist );
+int lwGetPoints( picoMemStream_t *fp, int cksize, lwPointList *point );
+void lwGetBoundingBox( lwPointList *point, float bbox[] );
+int lwAllocPolygons( lwPolygonList *plist, int npols, int nverts );
+int lwGetPolygons( picoMemStream_t *fp, int cksize, lwPolygonList *plist, int ptoffset );
+void lwGetPolyNormals( lwPointList *point, lwPolygonList *polygon );
+int lwGetPointPolygons( lwPointList *point, lwPolygonList *polygon );
+int lwResolvePolySurfaces( lwPolygonList *polygon, lwTagList *tlist,
+   lwSurface **surf, int *nsurfs );
+void lwGetVertNormals( lwPointList *point, lwPolygonList *polygon );
+void lwFreeTags( lwTagList *tlist );
+int lwGetTags( picoMemStream_t *fp, int cksize, lwTagList *tlist );
+int lwGetPolygonTags( picoMemStream_t *fp, int cksize, lwTagList *tlist,
+   lwPolygonList *plist );
+
+/* vmap.c */
+
+void lwFreeVMap( lwVMap *vmap );
+lwVMap *lwGetVMap( picoMemStream_t *fp, int cksize, int ptoffset, int poloffset,
+   int perpoly );
+int lwGetPointVMaps( lwPointList *point, lwVMap *vmap );
+int lwGetPolyVMaps( lwPolygonList *polygon, lwVMap *vmap );
+
+/* clip.c */
+
+void lwFreeClip( lwClip *clip );
+lwClip *lwGetClip( picoMemStream_t *fp, int cksize );
+lwClip *lwFindClip( lwClip *list, int index );
+
+/* envelope.c */
+
+void lwFreeEnvelope( lwEnvelope *env );
+lwEnvelope *lwGetEnvelope( picoMemStream_t *fp, int cksize );
+lwEnvelope *lwFindEnvelope( lwEnvelope *list, int index );
+float lwEvalEnvelope( lwEnvelope *env, float time );
+
+/* surface.c */
+
+void lwFreePlugin( lwPlugin *p );
+void lwFreeTexture( lwTexture *t );
+void lwFreeSurface( lwSurface *surf );
+int lwGetTHeader( picoMemStream_t *fp, int hsz, lwTexture *tex );
+int lwGetTMap( picoMemStream_t *fp, int tmapsz, lwTMap *tmap );
+int lwGetImageMap( picoMemStream_t *fp, int rsz, lwTexture *tex );
+int lwGetProcedural( picoMemStream_t *fp, int rsz, lwTexture *tex );
+int lwGetGradient( picoMemStream_t *fp, int rsz, lwTexture *tex );
+lwTexture *lwGetTexture( picoMemStream_t *fp, int bloksz, unsigned int type );
+lwPlugin *lwGetShader( picoMemStream_t *fp, int bloksz );
+lwSurface *lwGetSurface( picoMemStream_t *fp, int cksize );
+lwSurface *lwDefaultSurface( void );
+
+/* lwob.c */
+
+lwSurface *lwGetSurface5( picoMemStream_t *fp, int cksize, lwObject *obj );
+int lwGetPolygons5( picoMemStream_t *fp, int cksize, lwPolygonList *plist, int ptoffset );
+lwObject *lwGetObject5( const char *filename, picoMemStream_t *fp, unsigned int *failID, int *failpos );
+int lwValidateObject5( const char *filename, picoMemStream_t *fp, unsigned int *failID, int *failpos );
+
+/* list.c */
+
+void lwListFree( void *list, void ( *freeNode )( void * ));
+void lwListAdd( void **list, void *node );
+void lwListInsert( void **vlist, void *vitem,
+   int ( *compare )( void *, void * ));
+
+/* vecmath.c */
+
+float dot( float a[], float b[] );
+void cross( float a[], float b[], float c[] );
+void normalize( float v[] );
+#define vecangle( a, b ) ( float ) acos( dot( a, b ))
+
+/* lwio.c */
+
+void  set_flen( int i );
+int   get_flen( void );
+void *getbytes( picoMemStream_t *fp, int size );
+void  skipbytes( picoMemStream_t *fp, int n );
+int   getI1( picoMemStream_t *fp );
+short getI2( picoMemStream_t *fp );
+int   getI4( picoMemStream_t *fp );
+unsigned char  getU1( picoMemStream_t *fp );
+unsigned short getU2( picoMemStream_t *fp );
+unsigned int   getU4( picoMemStream_t *fp );
+int   getVX( picoMemStream_t *fp );
+float getF4( picoMemStream_t *fp );
+char *getS0( picoMemStream_t *fp );
+int   sgetI1( unsigned char **bp );
+short sgetI2( unsigned char **bp );
+int   sgetI4( unsigned char **bp );
+unsigned char  sgetU1( unsigned char **bp );
+unsigned short sgetU2( unsigned char **bp );
+unsigned int   sgetU4( unsigned char **bp );
+int   sgetVX( unsigned char **bp );
+float sgetF4( unsigned char **bp );
+char *sgetS0( unsigned char **bp );
+
+#ifndef __BIG_ENDIAN__
+  void revbytes( void *bp, int elsize, int elcount );
+#else
+  #define revbytes( b, s, c )
+#endif
+
+#endif