mirror of
https://github.com/id-Software/DOOM-3-BFG.git
synced 2024-12-15 06:51:22 +00:00
716 lines
19 KiB
C
716 lines
19 KiB
C
/*
|
|
===========================================================================
|
|
|
|
Doom 3 BFG Edition GPL Source Code
|
|
Copyright (C) 1993-2012 id Software LLC, a ZeniMax Media company.
|
|
|
|
This file is part of the Doom 3 BFG Edition GPL Source Code ("Doom 3 BFG Edition Source Code").
|
|
|
|
Doom 3 BFG Edition Source Code is free software: you can redistribute it and/or modify
|
|
it under the terms of the GNU General Public License as published by
|
|
the Free Software Foundation, either version 3 of the License, or
|
|
(at your option) any later version.
|
|
|
|
Doom 3 BFG Edition Source Code 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
|
|
GNU General Public License for more details.
|
|
|
|
You should have received a copy of the GNU General Public License
|
|
along with Doom 3 BFG Edition Source Code. If not, see <http://www.gnu.org/licenses/>.
|
|
|
|
In addition, the Doom 3 BFG Edition Source Code is also subject to certain additional terms. You should have received a copy of these additional terms immediately following the terms and conditions of the GNU General Public License which accompanied the Doom 3 BFG Edition Source Code. If not, please request a copy in writing from id Software at the address below.
|
|
|
|
If you have questions concerning this license or the applicable additional terms, you may contact in writing id Software LLC, c/o ZeniMax Media Inc., Suite 120, Rockville, Maryland 20850 USA.
|
|
|
|
===========================================================================
|
|
*/
|
|
|
|
#ifndef __LWO2_H__
|
|
#define __LWO2_H__
|
|
|
|
/*
|
|
======================================================================
|
|
|
|
LWO2 loader. (LightWave Object)
|
|
|
|
Ernie Wright 17 Sep 00
|
|
|
|
======================================================================
|
|
*/
|
|
|
|
/* 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;
|
|
|
|
// added by duffy
|
|
int offset;
|
|
} 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
|
|
{
|
|
union
|
|
{
|
|
intptr_t index;
|
|
lwSurface* ptr;
|
|
} 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
|
|
{
|
|
ID_TIME_T timeStamp;
|
|
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 */
|
|
|
|
lwObject* lwGetObject( const char* filename, unsigned int* failID, int* failpos );
|
|
void lwFreeObject( lwObject* object );
|
|
void lwFreeLayer( lwLayer* layer );
|
|
|
|
/* pntspols.c */
|
|
|
|
void lwFreePoints( lwPointList* point );
|
|
void lwFreePolygons( lwPolygonList* plist );
|
|
int lwGetPoints( idFile* fp, int cksize, lwPointList* point );
|
|
void lwGetBoundingBox( lwPointList* point, float bbox[] );
|
|
int lwAllocPolygons( lwPolygonList* plist, int npols, int nverts );
|
|
int lwGetPolygons( idFile* 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( idFile* fp, int cksize, lwTagList* tlist );
|
|
int lwGetPolygonTags( idFile* fp, int cksize, lwTagList* tlist,
|
|
lwPolygonList* plist );
|
|
|
|
/* vmap.c */
|
|
|
|
void lwFreeVMap( lwVMap* vmap );
|
|
lwVMap* lwGetVMap( idFile* 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( idFile* fp, int cksize );
|
|
lwClip* lwFindClip( lwClip* list, int index );
|
|
|
|
/* envelope.c */
|
|
|
|
void lwFreeEnvelope( lwEnvelope* env );
|
|
lwEnvelope* lwGetEnvelope( idFile* 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( idFile* fp, int hsz, lwTexture* tex );
|
|
int lwGetTMap( idFile* fp, int tmapsz, lwTMap* tmap );
|
|
int lwGetImageMap( idFile* fp, int rsz, lwTexture* tex );
|
|
int lwGetProcedural( idFile* fp, int rsz, lwTexture* tex );
|
|
int lwGetGradient( idFile* fp, int rsz, lwTexture* tex );
|
|
lwTexture* lwGetTexture( idFile* fp, int bloksz, unsigned int type );
|
|
lwPlugin* lwGetShader( idFile* fp, int bloksz );
|
|
lwSurface* lwGetSurface( idFile* fp, int cksize );
|
|
lwSurface* lwDefaultSurface();
|
|
|
|
/* lwob.c */
|
|
|
|
lwSurface* lwGetSurface5( idFile* fp, int cksize, lwObject* obj );
|
|
int lwGetPolygons5( idFile* fp, int cksize, lwPolygonList* plist, int ptoffset );
|
|
lwObject* lwGetObject5( const char* filename, 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 ) idMath::ACos( dot( a, b ) )
|
|
|
|
/* lwio.c */
|
|
|
|
void set_flen( int i );
|
|
int get_flen();
|
|
void* getbytes( idFile* fp, int size );
|
|
void skipbytes( idFile* fp, int n );
|
|
int getI1( idFile* fp );
|
|
short getI2( idFile* fp );
|
|
int getI4( idFile* fp );
|
|
unsigned char getU1( idFile* fp );
|
|
unsigned short getU2( idFile* fp );
|
|
unsigned int getU4( idFile* fp );
|
|
int getVX( idFile* fp );
|
|
float getF4( idFile* fp );
|
|
char* getS0( idFile* 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 );
|
|
|
|
#endif /* !__LWO2_H__ */
|