]> git.xonotic.org Git - xonotic/netradiant.git/blob - libs/picomodel/lwo/lwo2.h
transfer from internal tree r5311 branches/1.4-gpl
[xonotic/netradiant.git] / libs / picomodel / lwo / lwo2.h
1 /*\r
2 ======================================================================\r
3 lwo2.h\r
4 \r
5 Definitions and typedefs for LWO2 files.\r
6 \r
7 Ernie Wright  17 Sep 00\r
8 ====================================================================== */\r
9 \r
10 #ifndef LWO2_H\r
11 #define LWO2_H\r
12 \r
13 /* chunk and subchunk IDs */\r
14 \r
15 #define LWID_(a,b,c,d) (((a)<<24)|((b)<<16)|((c)<<8)|(d))\r
16 \r
17 #define ID_FORM  LWID_('F','O','R','M')\r
18 #define ID_LWO2  LWID_('L','W','O','2')\r
19 #define ID_LWOB  LWID_('L','W','O','B')\r
20 \r
21 /* top-level chunks */\r
22 #define ID_LAYR  LWID_('L','A','Y','R')\r
23 #define ID_TAGS  LWID_('T','A','G','S')\r
24 #define ID_PNTS  LWID_('P','N','T','S')\r
25 #define ID_BBOX  LWID_('B','B','O','X')\r
26 #define ID_VMAP  LWID_('V','M','A','P')\r
27 #define ID_VMAD  LWID_('V','M','A','D')\r
28 #define ID_POLS  LWID_('P','O','L','S')\r
29 #define ID_PTAG  LWID_('P','T','A','G')\r
30 #define ID_ENVL  LWID_('E','N','V','L')\r
31 #define ID_CLIP  LWID_('C','L','I','P')\r
32 #define ID_SURF  LWID_('S','U','R','F')\r
33 #define ID_DESC  LWID_('D','E','S','C')\r
34 #define ID_TEXT  LWID_('T','E','X','T')\r
35 #define ID_ICON  LWID_('I','C','O','N')\r
36 \r
37 /* polygon types */\r
38 #define ID_FACE  LWID_('F','A','C','E')\r
39 #define ID_CURV  LWID_('C','U','R','V')\r
40 #define ID_PTCH  LWID_('P','T','C','H')\r
41 #define ID_MBAL  LWID_('M','B','A','L')\r
42 #define ID_BONE  LWID_('B','O','N','E')\r
43 \r
44 /* polygon tags */\r
45 #define ID_SURF  LWID_('S','U','R','F')\r
46 #define ID_PART  LWID_('P','A','R','T')\r
47 #define ID_SMGP  LWID_('S','M','G','P')\r
48 \r
49 /* envelopes */\r
50 #define ID_PRE   LWID_('P','R','E',' ')\r
51 #define ID_POST  LWID_('P','O','S','T')\r
52 #define ID_KEY   LWID_('K','E','Y',' ')\r
53 #define ID_SPAN  LWID_('S','P','A','N')\r
54 #define ID_TCB   LWID_('T','C','B',' ')\r
55 #define ID_HERM  LWID_('H','E','R','M')\r
56 #define ID_BEZI  LWID_('B','E','Z','I')\r
57 #define ID_BEZ2  LWID_('B','E','Z','2')\r
58 #define ID_LINE  LWID_('L','I','N','E')\r
59 #define ID_STEP  LWID_('S','T','E','P')\r
60 \r
61 /* clips */\r
62 #define ID_STIL  LWID_('S','T','I','L')\r
63 #define ID_ISEQ  LWID_('I','S','E','Q')\r
64 #define ID_ANIM  LWID_('A','N','I','M')\r
65 #define ID_XREF  LWID_('X','R','E','F')\r
66 #define ID_STCC  LWID_('S','T','C','C')\r
67 #define ID_TIME  LWID_('T','I','M','E')\r
68 #define ID_CONT  LWID_('C','O','N','T')\r
69 #define ID_BRIT  LWID_('B','R','I','T')\r
70 #define ID_SATR  LWID_('S','A','T','R')\r
71 #define ID_HUE   LWID_('H','U','E',' ')\r
72 #define ID_GAMM  LWID_('G','A','M','M')\r
73 #define ID_NEGA  LWID_('N','E','G','A')\r
74 #define ID_IFLT  LWID_('I','F','L','T')\r
75 #define ID_PFLT  LWID_('P','F','L','T')\r
76 \r
77 /* surfaces */\r
78 #define ID_COLR  LWID_('C','O','L','R')\r
79 #define ID_LUMI  LWID_('L','U','M','I')\r
80 #define ID_DIFF  LWID_('D','I','F','F')\r
81 #define ID_SPEC  LWID_('S','P','E','C')\r
82 #define ID_GLOS  LWID_('G','L','O','S')\r
83 #define ID_REFL  LWID_('R','E','F','L')\r
84 #define ID_RFOP  LWID_('R','F','O','P')\r
85 #define ID_RIMG  LWID_('R','I','M','G')\r
86 #define ID_RSAN  LWID_('R','S','A','N')\r
87 #define ID_TRAN  LWID_('T','R','A','N')\r
88 #define ID_TROP  LWID_('T','R','O','P')\r
89 #define ID_TIMG  LWID_('T','I','M','G')\r
90 #define ID_RIND  LWID_('R','I','N','D')\r
91 #define ID_TRNL  LWID_('T','R','N','L')\r
92 #define ID_BUMP  LWID_('B','U','M','P')\r
93 #define ID_SMAN  LWID_('S','M','A','N')\r
94 #define ID_SIDE  LWID_('S','I','D','E')\r
95 #define ID_CLRH  LWID_('C','L','R','H')\r
96 #define ID_CLRF  LWID_('C','L','R','F')\r
97 #define ID_ADTR  LWID_('A','D','T','R')\r
98 #define ID_SHRP  LWID_('S','H','R','P')\r
99 #define ID_LINE  LWID_('L','I','N','E')\r
100 #define ID_LSIZ  LWID_('L','S','I','Z')\r
101 #define ID_ALPH  LWID_('A','L','P','H')\r
102 #define ID_AVAL  LWID_('A','V','A','L')\r
103 #define ID_GVAL  LWID_('G','V','A','L')\r
104 #define ID_BLOK  LWID_('B','L','O','K')\r
105 \r
106 /* texture layer */\r
107 #define ID_TYPE  LWID_('T','Y','P','E')\r
108 #define ID_CHAN  LWID_('C','H','A','N')\r
109 #define ID_NAME  LWID_('N','A','M','E')\r
110 #define ID_ENAB  LWID_('E','N','A','B')\r
111 #define ID_OPAC  LWID_('O','P','A','C')\r
112 #define ID_FLAG  LWID_('F','L','A','G')\r
113 #define ID_PROJ  LWID_('P','R','O','J')\r
114 #define ID_STCK  LWID_('S','T','C','K')\r
115 #define ID_TAMP  LWID_('T','A','M','P')\r
116 \r
117 /* texture coordinates */\r
118 #define ID_TMAP  LWID_('T','M','A','P')\r
119 #define ID_AXIS  LWID_('A','X','I','S')\r
120 #define ID_CNTR  LWID_('C','N','T','R')\r
121 #define ID_SIZE  LWID_('S','I','Z','E')\r
122 #define ID_ROTA  LWID_('R','O','T','A')\r
123 #define ID_OREF  LWID_('O','R','E','F')\r
124 #define ID_FALL  LWID_('F','A','L','L')\r
125 #define ID_CSYS  LWID_('C','S','Y','S')\r
126 \r
127 /* image map */\r
128 #define ID_IMAP  LWID_('I','M','A','P')\r
129 #define ID_IMAG  LWID_('I','M','A','G')\r
130 #define ID_WRAP  LWID_('W','R','A','P')\r
131 #define ID_WRPW  LWID_('W','R','P','W')\r
132 #define ID_WRPH  LWID_('W','R','P','H')\r
133 #define ID_VMAP  LWID_('V','M','A','P')\r
134 #define ID_AAST  LWID_('A','A','S','T')\r
135 #define ID_PIXB  LWID_('P','I','X','B')\r
136 \r
137 /* procedural */\r
138 #define ID_PROC  LWID_('P','R','O','C')\r
139 #define ID_COLR  LWID_('C','O','L','R')\r
140 #define ID_VALU  LWID_('V','A','L','U')\r
141 #define ID_FUNC  LWID_('F','U','N','C')\r
142 #define ID_FTPS  LWID_('F','T','P','S')\r
143 #define ID_ITPS  LWID_('I','T','P','S')\r
144 #define ID_ETPS  LWID_('E','T','P','S')\r
145 \r
146 /* gradient */\r
147 #define ID_GRAD  LWID_('G','R','A','D')\r
148 #define ID_GRST  LWID_('G','R','S','T')\r
149 #define ID_GREN  LWID_('G','R','E','N')\r
150 #define ID_PNAM  LWID_('P','N','A','M')\r
151 #define ID_INAM  LWID_('I','N','A','M')\r
152 #define ID_GRPT  LWID_('G','R','P','T')\r
153 #define ID_FKEY  LWID_('F','K','E','Y')\r
154 #define ID_IKEY  LWID_('I','K','E','Y')\r
155 \r
156 /* shader */\r
157 #define ID_SHDR  LWID_('S','H','D','R')\r
158 #define ID_DATA  LWID_('D','A','T','A')\r
159 \r
160 \r
161 /* generic linked list */\r
162 \r
163 typedef struct st_lwNode {\r
164    struct st_lwNode *next, *prev;\r
165    void *data;\r
166 } lwNode;\r
167 \r
168 \r
169 /* plug-in reference */\r
170 \r
171 typedef struct st_lwPlugin {\r
172    struct st_lwPlugin *next, *prev;\r
173    char          *ord;\r
174    char          *name;\r
175    int            flags;\r
176    void          *data;\r
177 } lwPlugin;\r
178 \r
179 \r
180 /* envelopes */\r
181 \r
182 typedef struct st_lwKey {\r
183    struct st_lwKey *next, *prev;\r
184    float          value;\r
185    float          time;\r
186    unsigned int   shape;               /* ID_TCB, ID_BEZ2, etc. */\r
187    float          tension;\r
188    float          continuity;\r
189    float          bias;\r
190    float          param[ 4 ];\r
191 } lwKey;\r
192 \r
193 typedef struct st_lwEnvelope {\r
194    struct st_lwEnvelope *next, *prev;\r
195    int            index;\r
196    int            type;\r
197    char          *name;\r
198    lwKey         *key;                 /* linked list of keys */\r
199    int            nkeys;\r
200    int            behavior[ 2 ];       /* pre and post (extrapolation) */\r
201    lwPlugin      *cfilter;             /* linked list of channel filters */\r
202    int            ncfilters;\r
203 } lwEnvelope;\r
204 \r
205 #define BEH_RESET      0\r
206 #define BEH_CONSTANT   1\r
207 #define BEH_REPEAT     2\r
208 #define BEH_OSCILLATE  3\r
209 #define BEH_OFFSET     4\r
210 #define BEH_LINEAR     5\r
211 \r
212 \r
213 /* values that can be enveloped */\r
214 \r
215 typedef struct st_lwEParam {\r
216    float          val;\r
217    int            eindex;\r
218 } lwEParam;\r
219 \r
220 typedef struct st_lwVParam {\r
221    float          val[ 3 ];\r
222    int            eindex;\r
223 } lwVParam;\r
224 \r
225 \r
226 /* clips */\r
227 \r
228 typedef struct st_lwClipStill {\r
229    char          *name;\r
230 } lwClipStill;\r
231 \r
232 typedef struct st_lwClipSeq {\r
233    char          *prefix;              /* filename before sequence digits */\r
234    char          *suffix;              /* after digits, e.g. extensions */\r
235    int            digits;\r
236    int            flags;\r
237    int            offset;\r
238    int            start;\r
239    int            end;\r
240 } lwClipSeq;\r
241 \r
242 typedef struct st_lwClipAnim {\r
243    char          *name;\r
244    char          *server;              /* anim loader plug-in */\r
245    void          *data;\r
246 } lwClipAnim;\r
247 \r
248 typedef struct st_lwClipXRef {\r
249    char          *string;\r
250    int            index;\r
251    struct st_lwClip *clip;\r
252 } lwClipXRef;\r
253 \r
254 typedef struct st_lwClipCycle {\r
255    char          *name;\r
256    int            lo;\r
257    int            hi;\r
258 } lwClipCycle;\r
259 \r
260 typedef struct st_lwClip {\r
261    struct st_lwClip *next, *prev;\r
262    int            index;\r
263    unsigned int   type;                /* ID_STIL, ID_ISEQ, etc. */\r
264    union {\r
265       lwClipStill    still;\r
266       lwClipSeq      seq;\r
267       lwClipAnim     anim;\r
268       lwClipXRef     xref;\r
269       lwClipCycle    cycle;\r
270    }              source;\r
271    float          start_time;\r
272    float          duration;\r
273    float          frame_rate;\r
274    lwEParam       contrast;\r
275    lwEParam       brightness;\r
276    lwEParam       saturation;\r
277    lwEParam       hue;\r
278    lwEParam       gamma;\r
279    int            negative;\r
280    lwPlugin      *ifilter;             /* linked list of image filters */\r
281    int            nifilters;\r
282    lwPlugin      *pfilter;             /* linked list of pixel filters */\r
283    int            npfilters;\r
284 } lwClip;\r
285 \r
286 \r
287 /* textures */\r
288 \r
289 typedef struct st_lwTMap {\r
290    lwVParam       size;\r
291    lwVParam       center;\r
292    lwVParam       rotate;\r
293    lwVParam       falloff;\r
294    int            fall_type;\r
295    char          *ref_object;\r
296    int            coord_sys;\r
297 } lwTMap;\r
298 \r
299 typedef struct st_lwImageMap {\r
300    int            cindex;\r
301    int            projection;\r
302    char          *vmap_name;\r
303    int            axis;\r
304    int            wrapw_type;\r
305    int            wraph_type;\r
306    lwEParam       wrapw;\r
307    lwEParam       wraph;\r
308    float          aa_strength;\r
309    int            aas_flags;\r
310    int            pblend;\r
311    lwEParam       stck;\r
312    lwEParam       amplitude;\r
313 } lwImageMap;\r
314 \r
315 #define PROJ_PLANAR       0\r
316 #define PROJ_CYLINDRICAL  1\r
317 #define PROJ_SPHERICAL    2\r
318 #define PROJ_CUBIC        3\r
319 #define PROJ_FRONT        4\r
320 \r
321 #define WRAP_NONE    0\r
322 #define WRAP_EDGE    1\r
323 #define WRAP_REPEAT  2\r
324 #define WRAP_MIRROR  3\r
325 \r
326 typedef struct st_lwProcedural {\r
327    int            axis;\r
328    float          value[ 3 ];\r
329    char          *name;\r
330    void          *data;\r
331 } lwProcedural;\r
332 \r
333 typedef struct st_lwGradKey {\r
334    struct st_lwGradKey *next, *prev;\r
335    float          value;\r
336    float          rgba[ 4 ];\r
337 } lwGradKey;\r
338 \r
339 typedef struct st_lwGradient {\r
340    char          *paramname;\r
341    char          *itemname;\r
342    float          start;\r
343    float          end;\r
344    int            repeat;\r
345    lwGradKey     *key;                 /* array of gradient keys */\r
346    short         *ikey;                /* array of interpolation codes */\r
347 } lwGradient;\r
348 \r
349 typedef struct st_lwTexture {\r
350    struct st_lwTexture *next, *prev;\r
351    char          *ord;\r
352    unsigned int   type;\r
353    unsigned int   chan;\r
354    lwEParam       opacity;\r
355    short          opac_type;\r
356    short          enabled;\r
357    short          negative;\r
358    short          axis;\r
359    union {\r
360       lwImageMap     imap;\r
361       lwProcedural   proc;\r
362       lwGradient     grad;\r
363    }              param;\r
364    lwTMap         tmap;\r
365 } lwTexture;\r
366 \r
367 \r
368 /* values that can be textured */\r
369 \r
370 typedef struct st_lwTParam {\r
371    float          val;\r
372    int            eindex;\r
373    lwTexture     *tex;                 /* linked list of texture layers */\r
374 } lwTParam;\r
375 \r
376 typedef struct st_lwCParam {\r
377    float          rgb[ 3 ];\r
378    int            eindex;\r
379    lwTexture     *tex;                 /* linked list of texture layers */\r
380 } lwCParam;\r
381 \r
382 \r
383 /* surfaces */\r
384 \r
385 typedef struct st_lwGlow {\r
386    short          enabled;\r
387    short          type;\r
388    lwEParam       intensity;\r
389    lwEParam       size;\r
390 } Glow;\r
391 \r
392 typedef struct st_lwRMap {\r
393    lwTParam       val;\r
394    int            options;\r
395    int            cindex;\r
396    float          seam_angle;\r
397 } lwRMap;\r
398 \r
399 typedef struct st_lwLine {\r
400    short          enabled;\r
401    unsigned short flags;\r
402    lwEParam       size;\r
403 } lwLine;\r
404 \r
405 typedef struct st_lwSurface {\r
406    struct st_lwSurface *next, *prev;\r
407    char          *name;\r
408    char          *srcname;\r
409    lwCParam       color;\r
410    lwTParam       luminosity;\r
411    lwTParam       diffuse;\r
412    lwTParam       specularity;\r
413    lwTParam       glossiness;\r
414    lwRMap         reflection;\r
415    lwRMap         transparency;\r
416    lwTParam       eta;\r
417    lwTParam       translucency;\r
418    lwTParam       bump;\r
419    float          smooth;\r
420    int            sideflags;\r
421    float          alpha;\r
422    int            alpha_mode;\r
423    lwEParam       color_hilite;\r
424    lwEParam       color_filter;\r
425    lwEParam       add_trans;\r
426    lwEParam       dif_sharp;\r
427    lwEParam       glow;\r
428    lwLine         line;\r
429    lwPlugin      *shader;              /* linked list of shaders */\r
430    int            nshaders;\r
431 } lwSurface;\r
432 \r
433 \r
434 /* vertex maps */\r
435 \r
436 typedef struct st_lwVMap {\r
437    struct st_lwVMap *next, *prev;\r
438    char          *name;\r
439    unsigned int   type;\r
440    int            dim;\r
441    int            nverts;\r
442    int            perpoly;\r
443    int           *vindex;              /* array of point indexes */\r
444    int           *pindex;              /* array of polygon indexes */\r
445    float        **val;\r
446 } lwVMap;\r
447 \r
448 typedef struct st_lwVMapPt {\r
449    lwVMap        *vmap;\r
450    int            index;               /* vindex or pindex element */\r
451 } lwVMapPt;\r
452 \r
453 \r
454 /* points and polygons */\r
455 \r
456 typedef struct st_lwPoint {\r
457    float          pos[ 3 ];\r
458    int            npols;               /* number of polygons sharing the point */\r
459    int           *pol;                 /* array of polygon indexes */\r
460    int            nvmaps;\r
461    lwVMapPt      *vm;                  /* array of vmap references */\r
462 } lwPoint;\r
463 \r
464 typedef struct st_lwPolVert {\r
465    int            index;               /* index into the point array */\r
466    float          norm[ 3 ];\r
467    int            nvmaps;\r
468    lwVMapPt      *vm;                  /* array of vmap references */\r
469 } lwPolVert;\r
470 \r
471 typedef struct st_lwPolygon {\r
472    lwSurface     *surf;\r
473    int            part;                /* part index */\r
474    int            smoothgrp;           /* smoothing group */\r
475    int            flags;\r
476    unsigned int   type;\r
477    float          norm[ 3 ];\r
478    int            nverts;\r
479    lwPolVert     *v;                   /* array of vertex records */\r
480 } lwPolygon;\r
481 \r
482 typedef struct st_lwPointList {\r
483    int            count;\r
484    int            offset;              /* only used during reading */\r
485    lwPoint       *pt;                  /* array of points */\r
486 } lwPointList;\r
487 \r
488 typedef struct st_lwPolygonList {\r
489    int            count;\r
490    int            offset;              /* only used during reading */\r
491    int            vcount;              /* total number of vertices */\r
492    int            voffset;             /* only used during reading */\r
493    lwPolygon     *pol;                 /* array of polygons */\r
494 } lwPolygonList;\r
495 \r
496 \r
497 /* geometry layers */\r
498 \r
499 typedef struct st_lwLayer {\r
500    struct st_lwLayer *next, *prev;\r
501    char          *name;\r
502    int            index;\r
503    int            parent;\r
504    int            flags;\r
505    float          pivot[ 3 ];\r
506    float          bbox[ 6 ];\r
507    lwPointList    point;\r
508    lwPolygonList  polygon;\r
509    int            nvmaps;\r
510    lwVMap        *vmap;                /* linked list of vmaps */\r
511 } lwLayer;\r
512 \r
513 \r
514 /* tag strings */\r
515 \r
516 typedef struct st_lwTagList {\r
517    int            count;\r
518    int            offset;              /* only used during reading */\r
519    char         **tag;                 /* array of strings */\r
520 } lwTagList;\r
521 \r
522 \r
523 /* an object */\r
524 \r
525 typedef struct st_lwObject {\r
526    lwLayer       *layer;               /* linked list of layers */\r
527    lwEnvelope    *env;                 /* linked list of envelopes */\r
528    lwClip        *clip;                /* linked list of clips */\r
529    lwSurface     *surf;                /* linked list of surfaces */\r
530    lwTagList      taglist;\r
531    int            nlayers;\r
532    int            nenvs;\r
533    int            nclips;\r
534    int            nsurfs;\r
535 } lwObject;\r
536 \r
537 \r
538 /* lwo2.c */\r
539 \r
540 void lwFreeLayer( lwLayer *layer );\r
541 void lwFreeObject( lwObject *object );\r
542 lwObject *lwGetObject( char *filename, picoMemStream_t *fp, unsigned int *failID, int *failpos );\r
543 int lwValidateObject( char *filename, picoMemStream_t *fp, unsigned int *failID, int *failpos );\r
544 \r
545 /* pntspols.c */\r
546 \r
547 void lwFreePoints( lwPointList *point );\r
548 void lwFreePolygons( lwPolygonList *plist );\r
549 int lwGetPoints( picoMemStream_t *fp, int cksize, lwPointList *point );\r
550 void lwGetBoundingBox( lwPointList *point, float bbox[] );\r
551 int lwAllocPolygons( lwPolygonList *plist, int npols, int nverts );\r
552 int lwGetPolygons( picoMemStream_t *fp, int cksize, lwPolygonList *plist, int ptoffset );\r
553 void lwGetPolyNormals( lwPointList *point, lwPolygonList *polygon );\r
554 int lwGetPointPolygons( lwPointList *point, lwPolygonList *polygon );\r
555 int lwResolvePolySurfaces( lwPolygonList *polygon, lwTagList *tlist,\r
556    lwSurface **surf, int *nsurfs );\r
557 void lwGetVertNormals( lwPointList *point, lwPolygonList *polygon );\r
558 void lwFreeTags( lwTagList *tlist );\r
559 int lwGetTags( picoMemStream_t *fp, int cksize, lwTagList *tlist );\r
560 int lwGetPolygonTags( picoMemStream_t *fp, int cksize, lwTagList *tlist,\r
561    lwPolygonList *plist );\r
562 \r
563 /* vmap.c */\r
564 \r
565 void lwFreeVMap( lwVMap *vmap );\r
566 lwVMap *lwGetVMap( picoMemStream_t *fp, int cksize, int ptoffset, int poloffset,\r
567    int perpoly );\r
568 int lwGetPointVMaps( lwPointList *point, lwVMap *vmap );\r
569 int lwGetPolyVMaps( lwPolygonList *polygon, lwVMap *vmap );\r
570 \r
571 /* clip.c */\r
572 \r
573 void lwFreeClip( lwClip *clip );\r
574 lwClip *lwGetClip( picoMemStream_t *fp, int cksize );\r
575 lwClip *lwFindClip( lwClip *list, int index );\r
576 \r
577 /* envelope.c */\r
578 \r
579 void lwFreeEnvelope( lwEnvelope *env );\r
580 lwEnvelope *lwGetEnvelope( picoMemStream_t *fp, int cksize );\r
581 lwEnvelope *lwFindEnvelope( lwEnvelope *list, int index );\r
582 float lwEvalEnvelope( lwEnvelope *env, float time );\r
583 \r
584 /* surface.c */\r
585 \r
586 void lwFreePlugin( lwPlugin *p );\r
587 void lwFreeTexture( lwTexture *t );\r
588 void lwFreeSurface( lwSurface *surf );\r
589 int lwGetTHeader( picoMemStream_t *fp, int hsz, lwTexture *tex );\r
590 int lwGetTMap( picoMemStream_t *fp, int tmapsz, lwTMap *tmap );\r
591 int lwGetImageMap( picoMemStream_t *fp, int rsz, lwTexture *tex );\r
592 int lwGetProcedural( picoMemStream_t *fp, int rsz, lwTexture *tex );\r
593 int lwGetGradient( picoMemStream_t *fp, int rsz, lwTexture *tex );\r
594 lwTexture *lwGetTexture( picoMemStream_t *fp, int bloksz, unsigned int type );\r
595 lwPlugin *lwGetShader( picoMemStream_t *fp, int bloksz );\r
596 lwSurface *lwGetSurface( picoMemStream_t *fp, int cksize );\r
597 lwSurface *lwDefaultSurface( void );\r
598 \r
599 /* lwob.c */\r
600 \r
601 lwSurface *lwGetSurface5( picoMemStream_t *fp, int cksize, lwObject *obj );\r
602 int lwGetPolygons5( picoMemStream_t *fp, int cksize, lwPolygonList *plist, int ptoffset );\r
603 lwObject *lwGetObject5( char *filename, picoMemStream_t *fp, unsigned int *failID, int *failpos );\r
604 int lwValidateObject5( char *filename, picoMemStream_t *fp, unsigned int *failID, int *failpos );\r
605 \r
606 /* list.c */\r
607 \r
608 void lwListFree( void *list, void ( *freeNode )( void * ));\r
609 void lwListAdd( void **list, void *node );\r
610 void lwListInsert( void **vlist, void *vitem,\r
611    int ( *compare )( void *, void * ));\r
612 \r
613 /* vecmath.c */\r
614 \r
615 float dot( float a[], float b[] );\r
616 void cross( float a[], float b[], float c[] );\r
617 void normalize( float v[] );\r
618 #define vecangle( a, b ) ( float ) acos( dot( a, b ))\r
619 \r
620 /* lwio.c */\r
621 \r
622 void  set_flen( int i );\r
623 int   get_flen( void );\r
624 void *getbytes( picoMemStream_t *fp, int size );\r
625 void  skipbytes( picoMemStream_t *fp, int n );\r
626 int   getI1( picoMemStream_t *fp );\r
627 short getI2( picoMemStream_t *fp );\r
628 int   getI4( picoMemStream_t *fp );\r
629 unsigned char  getU1( picoMemStream_t *fp );\r
630 unsigned short getU2( picoMemStream_t *fp );\r
631 unsigned int   getU4( picoMemStream_t *fp );\r
632 int   getVX( picoMemStream_t *fp );\r
633 float getF4( picoMemStream_t *fp );\r
634 char *getS0( picoMemStream_t *fp );\r
635 int   sgetI1( unsigned char **bp );\r
636 short sgetI2( unsigned char **bp );\r
637 int   sgetI4( unsigned char **bp );\r
638 unsigned char  sgetU1( unsigned char **bp );\r
639 unsigned short sgetU2( unsigned char **bp );\r
640 unsigned int   sgetU4( unsigned char **bp );\r
641 int   sgetVX( unsigned char **bp );\r
642 float sgetF4( unsigned char **bp );\r
643 char *sgetS0( unsigned char **bp );\r
644 \r
645 #ifdef _WIN32\r
646   void revbytes( void *bp, int elsize, int elcount );\r
647 #else\r
648   #define revbytes( b, s, c )\r
649 #endif\r
650 \r
651 #endif\r