~ubuntu-branches/ubuntu/wily/nexuiz/wily

« back to all changes in this revision

Viewing changes to darkplaces/model_brush.h

  • Committer: Bazaar Package Importer
  • Author(s): Bruno "Fuddl" Kleinert
  • Date: 2009-10-16 12:52:25 UTC
  • mto: (1.1.7 upstream) (2.2.1 experimental)
  • mto: This revision was merged to the branch mainline in revision 18.
  • Revision ID: james.westby@ubuntu.com-20091016125225-4mccppxccoa1w39o
ImportĀ upstreamĀ versionĀ 2.5.2

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
/*
2
 
Copyright (C) 1996-1997 Id Software, Inc.
3
 
 
4
 
This program is free software; you can redistribute it and/or
5
 
modify it under the terms of the GNU General Public License
6
 
as published by the Free Software Foundation; either version 2
7
 
of the License, or (at your option) any later version.
8
 
 
9
 
This program is distributed in the hope that it will be useful,
10
 
but WITHOUT ANY WARRANTY; without even the implied warranty of
11
 
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
12
 
 
13
 
See the GNU General Public License for more details.
14
 
 
15
 
You should have received a copy of the GNU General Public License
16
 
along with this program; if not, write to the Free Software
17
 
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
18
 
 
19
 
*/
20
 
 
21
 
#ifndef MODEL_BRUSH_H
22
 
#define MODEL_BRUSH_H
23
 
 
24
 
/*
25
 
==============================================================================
26
 
 
27
 
BRUSH MODELS
28
 
 
29
 
==============================================================================
30
 
*/
31
 
 
32
 
 
33
 
 
34
 
//
35
 
// in memory representation
36
 
//
37
 
typedef struct mvertex_s
38
 
{
39
 
        vec3_t position;
40
 
}
41
 
mvertex_t;
42
 
 
43
 
#define SIDE_FRONT 0
44
 
#define SIDE_BACK 1
45
 
#define SIDE_ON 2
46
 
 
47
 
 
48
 
// plane_t structure
49
 
typedef struct mplane_s
50
 
{
51
 
        vec3_t normal;
52
 
        float dist;
53
 
        // for texture axis selection and fast side tests
54
 
        int type;
55
 
        int signbits;
56
 
}
57
 
mplane_t;
58
 
 
59
 
#define SHADERSTAGE_SKY 0
60
 
#define SHADERSTAGE_NORMAL 1
61
 
#define SHADERSTAGE_COUNT 2
62
 
 
63
 
//#define SURF_PLANEBACK 2
64
 
 
65
 
// use alpha blend on this material
66
 
#define MATERIALFLAG_ALPHA 2
67
 
// use additive blend on this material
68
 
#define MATERIALFLAG_ADD 4
69
 
// turn off depth test on this material
70
 
#define MATERIALFLAG_NODEPTHTEST 8
71
 
// multiply alpha by r_wateralpha cvar
72
 
#define MATERIALFLAG_WATERALPHA 16
73
 
// draw with no lighting
74
 
#define MATERIALFLAG_FULLBRIGHT 32
75
 
// drawn as a normal surface (alternative to SKY)
76
 
#define MATERIALFLAG_WALL 64
77
 
// this surface shows the sky in its place, alternative to WALL
78
 
// skipped if transparent
79
 
#define MATERIALFLAG_SKY 128
80
 
// swirling water effect (used with MATERIALFLAG_WALL)
81
 
#define MATERIALFLAG_WATERSCROLL 256
82
 
// skips drawing the surface
83
 
#define MATERIALFLAG_NODRAW 512
84
 
// probably used only on q1bsp water
85
 
#define MATERIALFLAG_LIGHTBOTHSIDES 1024
86
 
// use alpha test on this material
87
 
#define MATERIALFLAG_ALPHATEST 2048
88
 
// treat this material as a blended transparency (as opposed to an alpha test
89
 
// transparency), this causes special fog behavior, and disables glDepthMask
90
 
#define MATERIALFLAG_BLENDED 4096
91
 
// render using a custom blendfunc
92
 
#define MATERIALFLAG_CUSTOMBLEND 8192
93
 
// do not cast shadows from this material
94
 
#define MATERIALFLAG_NOSHADOW 16384
95
 
// render using vertex alpha (q3bsp) as texture blend parameter between foreground (normal) skinframe and background skinframe
96
 
#define MATERIALFLAG_VERTEXTEXTUREBLEND 32768
97
 
// disables GL_CULL_FACE on this texture (making it double sided)
98
 
#define MATERIALFLAG_NOCULLFACE 65536
99
 
// render with a very short depth range (like 10% of normal), this causes entities to appear infront of most of the scene
100
 
#define MATERIALFLAG_SHORTDEPTHRANGE 131072
101
 
// render water, comprising refraction and reflection (note: this is always opaque, the shader does the alpha effect)
102
 
#define MATERIALFLAG_WATERSHADER 262144
103
 
// render refraction (note: this is just a way to distort the background, otherwise useless)
104
 
#define MATERIALFLAG_REFRACTION 524288
105
 
// render reflection
106
 
#define MATERIALFLAG_REFLECTION 1048576
107
 
// use model lighting on this material (q1bsp lightmap sampling or q3bsp lightgrid, implies FULLBRIGHT is false)
108
 
#define MATERIALFLAG_MODELLIGHT 4194304
109
 
// add directional model lighting to this material (q3bsp lightgrid only)
110
 
#define MATERIALFLAG_MODELLIGHT_DIRECTIONAL 8388608
111
 
// combined mask of all attributes that require depth sorted rendering
112
 
#define MATERIALFLAGMASK_DEPTHSORTED (MATERIALFLAG_BLENDED | MATERIALFLAG_NODEPTHTEST)
113
 
 
114
 
typedef struct medge_s
115
 
{
116
 
        unsigned short v[2];
117
 
}
118
 
medge_t;
119
 
 
120
 
struct entity_render_s;
121
 
struct texture_s;
122
 
struct msurface_s;
123
 
 
124
 
typedef struct mnode_s
125
 
{
126
 
        //this part shared between node and leaf
127
 
        mplane_t *plane; // != NULL
128
 
        struct mnode_s *parent;
129
 
        struct mportal_s *portals;
130
 
        // for bounding box culling
131
 
        vec3_t mins;
132
 
        vec3_t maxs;
133
 
        // supercontents from all brushes inside this node or leaf
134
 
        int combinedsupercontents;
135
 
 
136
 
        // this part unique to node
137
 
        struct mnode_s *children[2];
138
 
 
139
 
        // q1bsp specific
140
 
        unsigned short firstsurface;
141
 
        unsigned short numsurfaces;
142
 
}
143
 
mnode_t;
144
 
 
145
 
typedef struct mleaf_s
146
 
{
147
 
        //this part shared between node and leaf
148
 
        mplane_t *plane; // == NULL
149
 
        struct mnode_s *parent;
150
 
        struct mportal_s *portals;
151
 
        // for bounding box culling
152
 
        vec3_t mins;
153
 
        vec3_t maxs;
154
 
        // supercontents from all brushes inside this node or leaf
155
 
        int combinedsupercontents;
156
 
 
157
 
        // this part unique to leaf
158
 
        // common
159
 
        int clusterindex; // -1 is not in pvs, >= 0 is pvs bit number
160
 
        int areaindex; // q3bsp
161
 
        int containscollisionsurfaces; // indicates whether the leafsurfaces contains q3 patches
162
 
        int numleafsurfaces;
163
 
        int *firstleafsurface;
164
 
        int numleafbrushes; // q3bsp
165
 
        int *firstleafbrush; // q3bsp
166
 
        unsigned char ambient_sound_level[NUM_AMBIENTS]; // q1bsp
167
 
        int contents; // q1bsp: // TODO: remove (only used temporarily during loading when making collision hull 0)
168
 
        int portalmarkid; // q1bsp // used by see-polygon-through-portals visibility checker
169
 
}
170
 
mleaf_t;
171
 
 
172
 
typedef struct mclipnode_s
173
 
{
174
 
        int                     planenum;
175
 
        int                     children[2];    // negative numbers are contents
176
 
} mclipnode_t;
177
 
 
178
 
typedef struct hull_s
179
 
{
180
 
        mclipnode_t *clipnodes;
181
 
        mplane_t *planes;
182
 
        int firstclipnode;
183
 
        int lastclipnode;
184
 
        vec3_t clip_mins;
185
 
        vec3_t clip_maxs;
186
 
        vec3_t clip_size;
187
 
}
188
 
hull_t;
189
 
 
190
 
typedef struct mportal_s
191
 
{
192
 
        struct mportal_s *next; // the next portal on this leaf
193
 
        mleaf_t *here; // the leaf this portal is on
194
 
        mleaf_t *past; // the leaf through this portal (infront)
195
 
        int numpoints;
196
 
        mvertex_t *points;
197
 
        vec3_t mins, maxs; // culling
198
 
        mplane_t plane;
199
 
}
200
 
mportal_t;
201
 
 
202
 
typedef struct svbspmesh_s
203
 
{
204
 
        struct svbspmesh_s *next;
205
 
        int numverts, maxverts;
206
 
        int numtriangles, maxtriangles;
207
 
        float *verts;
208
 
        int *elements;
209
 
}
210
 
svbspmesh_t;
211
 
 
212
 
// Q2 bsp stuff
213
 
 
214
 
#define Q2BSPVERSION    38
215
 
 
216
 
// leaffaces, leafbrushes, planes, and verts are still bounded by
217
 
// 16 bit short limits
218
 
 
219
 
//=============================================================================
220
 
 
221
 
#define Q2LUMP_ENTITIES         0
222
 
#define Q2LUMP_PLANES                   1
223
 
#define Q2LUMP_VERTEXES         2
224
 
#define Q2LUMP_VISIBILITY               3
225
 
#define Q2LUMP_NODES                    4
226
 
#define Q2LUMP_TEXINFO          5
227
 
#define Q2LUMP_FACES                    6
228
 
#define Q2LUMP_LIGHTING         7
229
 
#define Q2LUMP_LEAFS                    8
230
 
#define Q2LUMP_LEAFFACES                9
231
 
#define Q2LUMP_LEAFBRUSHES      10
232
 
#define Q2LUMP_EDGES                    11
233
 
#define Q2LUMP_SURFEDGES                12
234
 
#define Q2LUMP_MODELS                   13
235
 
#define Q2LUMP_BRUSHES          14
236
 
#define Q2LUMP_BRUSHSIDES               15
237
 
#define Q2LUMP_POP                      16
238
 
#define Q2LUMP_AREAS                    17
239
 
#define Q2LUMP_AREAPORTALS      18
240
 
#define Q2HEADER_LUMPS          19
241
 
 
242
 
typedef struct q2dheader_s
243
 
{
244
 
        int                     ident;
245
 
        int                     version;
246
 
        lump_t          lumps[Q2HEADER_LUMPS];
247
 
} q2dheader_t;
248
 
 
249
 
typedef struct q2dmodel_s
250
 
{
251
 
        float           mins[3], maxs[3];
252
 
        float           origin[3];              // for sounds or lights
253
 
        int                     headnode;
254
 
        int                     firstface, numfaces;    // submodels just draw faces
255
 
                                                                                // without walking the bsp tree
256
 
} q2dmodel_t;
257
 
 
258
 
// planes (x&~1) and (x&~1)+1 are always opposites
259
 
 
260
 
// contents flags are seperate bits
261
 
// a given brush can contribute multiple content bits
262
 
// multiple brushes can be in a single leaf
263
 
 
264
 
// these definitions also need to be in q_shared.h!
265
 
 
266
 
// lower bits are stronger, and will eat weaker brushes completely
267
 
#define Q2CONTENTS_SOLID                        1               // an eye is never valid in a solid
268
 
#define Q2CONTENTS_WINDOW                       2               // translucent, but not watery
269
 
#define Q2CONTENTS_AUX                  4
270
 
#define Q2CONTENTS_LAVA                 8
271
 
#define Q2CONTENTS_SLIME                        16
272
 
#define Q2CONTENTS_WATER                        32
273
 
#define Q2CONTENTS_MIST                 64
274
 
#define Q2LAST_VISIBLE_CONTENTS 64
275
 
 
276
 
// remaining contents are non-visible, and don't eat brushes
277
 
 
278
 
#define Q2CONTENTS_AREAPORTAL           0x8000
279
 
 
280
 
#define Q2CONTENTS_PLAYERCLIP           0x10000
281
 
#define Q2CONTENTS_MONSTERCLIP  0x20000
282
 
 
283
 
// currents can be added to any other contents, and may be mixed
284
 
#define Q2CONTENTS_CURRENT_0            0x40000
285
 
#define Q2CONTENTS_CURRENT_90           0x80000
286
 
#define Q2CONTENTS_CURRENT_180  0x100000
287
 
#define Q2CONTENTS_CURRENT_270  0x200000
288
 
#define Q2CONTENTS_CURRENT_UP           0x400000
289
 
#define Q2CONTENTS_CURRENT_DOWN 0x800000
290
 
 
291
 
#define Q2CONTENTS_ORIGIN                       0x1000000       // removed before bsping an entity
292
 
 
293
 
#define Q2CONTENTS_MONSTER              0x2000000       // should never be on a brush, only in game
294
 
#define Q2CONTENTS_DEADMONSTER  0x4000000
295
 
#define Q2CONTENTS_DETAIL                       0x8000000       // brushes to be added after vis leafs
296
 
#define Q2CONTENTS_TRANSLUCENT  0x10000000      // auto set if any surface has trans
297
 
#define Q2CONTENTS_LADDER                       0x20000000
298
 
 
299
 
 
300
 
 
301
 
#define Q2SURF_LIGHT            0x1             // value will hold the light strength
302
 
 
303
 
#define Q2SURF_SLICK            0x2             // effects game physics
304
 
 
305
 
#define Q2SURF_SKY              0x4             // don't draw, but add to skybox
306
 
#define Q2SURF_WARP             0x8             // turbulent water warp
307
 
#define Q2SURF_TRANS33  0x10
308
 
#define Q2SURF_TRANS66  0x20
309
 
#define Q2SURF_FLOWING  0x40    // scroll towards angle
310
 
#define Q2SURF_NODRAW           0x80    // don't bother referencing the texture
311
 
 
312
 
 
313
 
 
314
 
 
315
 
typedef struct q2dnode_s
316
 
{
317
 
        int                     planenum;
318
 
        int                     children[2];    // negative numbers are -(leafs+1), not nodes
319
 
        short           mins[3];                // for frustom culling
320
 
        short           maxs[3];
321
 
        unsigned short  firstface;
322
 
        unsigned short  numfaces;       // counting both sides
323
 
} q2dnode_t;
324
 
 
325
 
 
326
 
typedef struct q2texinfo_s
327
 
{
328
 
        float           vecs[2][4];             // [s/t][xyz offset]
329
 
        int                     flags;                  // miptex flags + overrides
330
 
        int                     value;                  // light emission, etc
331
 
        char            texture[32];    // texture name (textures/*.wal)
332
 
        int                     nexttexinfo;    // for animations, -1 = end of chain
333
 
} q2texinfo_t;
334
 
 
335
 
typedef struct q2dleaf_s
336
 
{
337
 
        int                             contents;                       // OR of all brushes (not needed?)
338
 
 
339
 
        short                   cluster;
340
 
        short                   area;
341
 
 
342
 
        short                   mins[3];                        // for frustum culling
343
 
        short                   maxs[3];
344
 
 
345
 
        unsigned short  firstleafface;
346
 
        unsigned short  numleaffaces;
347
 
 
348
 
        unsigned short  firstleafbrush;
349
 
        unsigned short  numleafbrushes;
350
 
} q2dleaf_t;
351
 
 
352
 
typedef struct q2dbrushside_s
353
 
{
354
 
        unsigned short  planenum;               // facing out of the leaf
355
 
        short   texinfo;
356
 
} q2dbrushside_t;
357
 
 
358
 
typedef struct q2dbrush_s
359
 
{
360
 
        int                     firstside;
361
 
        int                     numsides;
362
 
        int                     contents;
363
 
} q2dbrush_t;
364
 
 
365
 
 
366
 
// the visibility lump consists of a header with a count, then
367
 
// byte offsets for the PVS and PHS of each cluster, then the raw
368
 
// compressed bit vectors
369
 
#define Q2DVIS_PVS      0
370
 
#define Q2DVIS_PHS      1
371
 
typedef struct q2dvis_s
372
 
{
373
 
        int                     numclusters;
374
 
        int                     bitofs[8][2];   // bitofs[numclusters][2]
375
 
} q2dvis_t;
376
 
 
377
 
// each area has a list of portals that lead into other areas
378
 
// when portals are closed, other areas may not be visible or
379
 
// hearable even if the vis info says that it should be
380
 
typedef struct q2dareaportal_s
381
 
{
382
 
        int             portalnum;
383
 
        int             otherarea;
384
 
} q2dareaportal_t;
385
 
 
386
 
typedef struct q2darea_s
387
 
{
388
 
        int             numareaportals;
389
 
        int             firstareaportal;
390
 
} q2darea_t;
391
 
 
392
 
 
393
 
//Q3 bsp stuff
394
 
 
395
 
#define Q3BSPVERSION    46
396
 
 
397
 
#define Q3LUMP_ENTITIES         0 // entities to spawn (used by server and client)
398
 
#define Q3LUMP_TEXTURES         1 // textures used (used by faces)
399
 
#define Q3LUMP_PLANES           2 // planes used (used by bsp nodes)
400
 
#define Q3LUMP_NODES            3 // bsp nodes (used by bsp nodes, bsp leafs, rendering, collisions)
401
 
#define Q3LUMP_LEAFS            4 // bsp leafs (used by bsp nodes)
402
 
#define Q3LUMP_LEAFFACES        5 // array of ints indexing faces (used by leafs)
403
 
#define Q3LUMP_LEAFBRUSHES      6 // array of ints indexing brushes (used by leafs)
404
 
#define Q3LUMP_MODELS           7 // models (used by rendering, collisions)
405
 
#define Q3LUMP_BRUSHES          8 // brushes (used by effects, collisions)
406
 
#define Q3LUMP_BRUSHSIDES       9 // brush faces (used by brushes)
407
 
#define Q3LUMP_VERTICES         10 // mesh vertices (used by faces)
408
 
#define Q3LUMP_TRIANGLES        11 // mesh triangles (used by faces)
409
 
#define Q3LUMP_EFFECTS          12 // fog (used by faces)
410
 
#define Q3LUMP_FACES            13 // surfaces (used by leafs)
411
 
#define Q3LUMP_LIGHTMAPS        14 // lightmap textures (used by faces)
412
 
#define Q3LUMP_LIGHTGRID        15 // lighting as a voxel grid (used by rendering)
413
 
#define Q3LUMP_PVS                      16 // potentially visible set; bit[clusters][clusters] (used by rendering)
414
 
#define Q3HEADER_LUMPS          17
415
 
 
416
 
typedef struct q3dheader_s
417
 
{
418
 
        int                     ident;
419
 
        int                     version;
420
 
        lump_t          lumps[Q3HEADER_LUMPS];
421
 
} q3dheader_t;
422
 
 
423
 
typedef struct q3dtexture_s
424
 
{
425
 
        char name[Q3PATHLENGTH];
426
 
        int surfaceflags;
427
 
        int contents;
428
 
}
429
 
q3dtexture_t;
430
 
 
431
 
// note: planes are paired, the pair of planes with i and i ^ 1 are opposites.
432
 
typedef struct q3dplane_s
433
 
{
434
 
        float normal[3];
435
 
        float dist;
436
 
}
437
 
q3dplane_t;
438
 
 
439
 
typedef struct q3dnode_s
440
 
{
441
 
        int planeindex;
442
 
        int childrenindex[2];
443
 
        int mins[3];
444
 
        int maxs[3];
445
 
}
446
 
q3dnode_t;
447
 
 
448
 
typedef struct q3dleaf_s
449
 
{
450
 
        int clusterindex; // pvs index
451
 
        int areaindex; // area index
452
 
        int mins[3];
453
 
        int maxs[3];
454
 
        int firstleafface;
455
 
        int numleaffaces;
456
 
        int firstleafbrush;
457
 
        int numleafbrushes;
458
 
}
459
 
q3dleaf_t;
460
 
 
461
 
typedef struct q3dmodel_s
462
 
{
463
 
        float mins[3];
464
 
        float maxs[3];
465
 
        int firstface;
466
 
        int numfaces;
467
 
        int firstbrush;
468
 
        int numbrushes;
469
 
}
470
 
q3dmodel_t;
471
 
 
472
 
typedef struct q3dbrush_s
473
 
{
474
 
        int firstbrushside;
475
 
        int numbrushsides;
476
 
        int textureindex;
477
 
}
478
 
q3dbrush_t;
479
 
 
480
 
typedef struct q3dbrushside_s
481
 
{
482
 
        int planeindex;
483
 
        int textureindex;
484
 
}
485
 
q3dbrushside_t;
486
 
 
487
 
typedef struct q3dvertex_s
488
 
{
489
 
        float origin3f[3];
490
 
        float texcoord2f[2];
491
 
        float lightmap2f[2];
492
 
        float normal3f[3];
493
 
        unsigned char color4ub[4];
494
 
}
495
 
q3dvertex_t;
496
 
 
497
 
typedef struct q3dmeshvertex_s
498
 
{
499
 
        int offset; // first vertex index of mesh
500
 
}
501
 
q3dmeshvertex_t;
502
 
 
503
 
typedef struct q3deffect_s
504
 
{
505
 
        char shadername[Q3PATHLENGTH];
506
 
        int brushindex;
507
 
        int unknown; // I read this is always 5 except in q3dm8 which has one effect with -1
508
 
}
509
 
q3deffect_t;
510
 
 
511
 
#define Q3FACETYPE_FLAT 1 // common
512
 
#define Q3FACETYPE_PATCH 2 // common
513
 
#define Q3FACETYPE_MESH 3 // common
514
 
#define Q3FACETYPE_FLARE 4 // rare (is this ever used?)
515
 
 
516
 
typedef struct q3dface_s
517
 
{
518
 
        int textureindex;
519
 
        int effectindex; // -1 if none
520
 
        int type; // Q3FACETYPE
521
 
        int firstvertex;
522
 
        int numvertices;
523
 
        int firstelement;
524
 
        int numelements;
525
 
        int lightmapindex; // -1 if none
526
 
        int lightmap_base[2];
527
 
        int lightmap_size[2];
528
 
        union
529
 
        {
530
 
                struct
531
 
                {
532
 
                        // corrupt or don't care
533
 
                        int blah[14];
534
 
                }
535
 
                unknown;
536
 
                struct
537
 
                {
538
 
                        // Q3FACETYPE_FLAT
539
 
                        // mesh is a collection of triangles on a plane, renderable as a mesh (NOT a polygon)
540
 
                        float lightmap_origin[3];
541
 
                        float lightmap_vectors[2][3];
542
 
                        float normal[3];
543
 
                        int unused1[2];
544
 
                }
545
 
                flat;
546
 
                struct
547
 
                {
548
 
                        // Q3FACETYPE_PATCH
549
 
                        // patch renders as a bezier mesh, with adjustable tesselation
550
 
                        // level (optionally based on LOD using the bbox and polygon
551
 
                        // count to choose a tesselation level)
552
 
                        // note: multiple patches may have the same bbox to cause them to
553
 
                        // be LOD adjusted together as a group
554
 
                        int unused1[3];
555
 
                        float mins[3]; // LOD bbox
556
 
                        float maxs[3]; // LOD bbox
557
 
                        int unused2[3];
558
 
                        int patchsize[2]; // dimensions of vertex grid
559
 
                }
560
 
                patch;
561
 
                struct
562
 
                {
563
 
                        // Q3FACETYPE_MESH
564
 
                        // mesh renders as simply a triangle mesh
565
 
                        int unused1[3];
566
 
                        float mins[3];
567
 
                        float maxs[3];
568
 
                        int unused2[5];
569
 
                }
570
 
                mesh;
571
 
                struct
572
 
                {
573
 
                        // Q3FACETYPE_FLARE
574
 
                        // flare renders as a simple sprite at origin, no geometry
575
 
                        // exists, nor does it have a radius, a cvar controls the radius
576
 
                        // and another cvar controls distance fade
577
 
                        // (they were not used in Q3 I'm told)
578
 
                        float origin[3];
579
 
                        int unused1[11];
580
 
                }
581
 
                flare;
582
 
        }
583
 
        specific;
584
 
}
585
 
q3dface_t;
586
 
 
587
 
typedef struct q3dlightmap_s
588
 
{
589
 
        unsigned char rgb[128*128*3];
590
 
}
591
 
q3dlightmap_t;
592
 
 
593
 
typedef struct q3dlightgrid_s
594
 
{
595
 
        unsigned char ambientrgb[3];
596
 
        unsigned char diffusergb[3];
597
 
        unsigned char diffusepitch;
598
 
        unsigned char diffuseyaw;
599
 
}
600
 
q3dlightgrid_t;
601
 
 
602
 
typedef struct q3dpvs_s
603
 
{
604
 
        int numclusters;
605
 
        int chainlength;
606
 
        // unsigned char chains[];
607
 
        // containing bits in 0-7 order (not 7-0 order),
608
 
        // pvschains[mycluster * chainlength + (thatcluster >> 3)] & (1 << (thatcluster & 7))
609
 
}
610
 
q3dpvs_t;
611
 
 
612
 
// surfaceflags from bsp
613
 
#define Q3SURFACEFLAG_NODAMAGE 1
614
 
#define Q3SURFACEFLAG_SLICK 2
615
 
#define Q3SURFACEFLAG_SKY 4
616
 
#define Q3SURFACEFLAG_LADDER 8
617
 
#define Q3SURFACEFLAG_NOIMPACT 16
618
 
#define Q3SURFACEFLAG_NOMARKS 32
619
 
#define Q3SURFACEFLAG_FLESH 64
620
 
#define Q3SURFACEFLAG_NODRAW 128
621
 
#define Q3SURFACEFLAG_HINT 256
622
 
#define Q3SURFACEFLAG_SKIP 512
623
 
#define Q3SURFACEFLAG_NOLIGHTMAP 1024
624
 
#define Q3SURFACEFLAG_POINTLIGHT 2048
625
 
#define Q3SURFACEFLAG_METALSTEPS 4096
626
 
#define Q3SURFACEFLAG_NOSTEPS 8192
627
 
#define Q3SURFACEFLAG_NONSOLID 16384
628
 
#define Q3SURFACEFLAG_LIGHTFILTER 32768
629
 
#define Q3SURFACEFLAG_ALPHASHADOW 65536
630
 
#define Q3SURFACEFLAG_NODLIGHT 131072
631
 
#define Q3SURFACEFLAG_DUST 262144
632
 
 
633
 
// surfaceparms from shaders
634
 
#define Q3SURFACEPARM_ALPHASHADOW 1
635
 
#define Q3SURFACEPARM_AREAPORTAL 2
636
 
#define Q3SURFACEPARM_CLUSTERPORTAL 4
637
 
#define Q3SURFACEPARM_DETAIL 8
638
 
#define Q3SURFACEPARM_DONOTENTER 16
639
 
#define Q3SURFACEPARM_FOG 32
640
 
#define Q3SURFACEPARM_LAVA 64
641
 
#define Q3SURFACEPARM_LIGHTFILTER 128
642
 
#define Q3SURFACEPARM_METALSTEPS 256
643
 
#define Q3SURFACEPARM_NODAMAGE 512
644
 
#define Q3SURFACEPARM_NODLIGHT 1024
645
 
#define Q3SURFACEPARM_NODRAW 2048
646
 
#define Q3SURFACEPARM_NODROP 4096
647
 
#define Q3SURFACEPARM_NOIMPACT 8192
648
 
#define Q3SURFACEPARM_NOLIGHTMAP 16384
649
 
#define Q3SURFACEPARM_NOMARKS 32768
650
 
#define Q3SURFACEPARM_NOMIPMAPS 65536
651
 
#define Q3SURFACEPARM_NONSOLID 131072
652
 
#define Q3SURFACEPARM_ORIGIN 262144
653
 
#define Q3SURFACEPARM_PLAYERCLIP 524288
654
 
#define Q3SURFACEPARM_SKY 1048576
655
 
#define Q3SURFACEPARM_SLICK 2197152
656
 
#define Q3SURFACEPARM_SLIME 4194304
657
 
#define Q3SURFACEPARM_STRUCTURAL 8388608
658
 
#define Q3SURFACEPARM_TRANS 16777216
659
 
#define Q3SURFACEPARM_WATER 33554432
660
 
#define Q3SURFACEPARM_POINTLIGHT 67108864
661
 
#define Q3SURFACEPARM_HINT 134217728
662
 
#define Q3SURFACEPARM_DUST 268435456
663
 
#define Q3SURFACEPARM_BOTCLIP 536870912
664
 
#define Q3SURFACEPARM_LIGHTGRID 1073741824
665
 
#define Q3SURFACEPARM_ANTIPORTAL 2147483648u
666
 
 
667
 
typedef struct q3mbrush_s
668
 
{
669
 
        struct colbrushf_s *colbrushf;
670
 
        int numbrushsides;
671
 
        struct q3mbrushside_s *firstbrushside;
672
 
        struct texture_s *texture;
673
 
}
674
 
q3mbrush_t;
675
 
 
676
 
typedef struct q3mbrushside_s
677
 
{
678
 
        struct mplane_s *plane;
679
 
        struct texture_s *texture;
680
 
}
681
 
q3mbrushside_t;
682
 
 
683
 
#define CHECKPVSBIT(pvs,b) ((b) >= 0 ? ((pvs)[(b) >> 3] & (1 << ((b) & 7))) : false)
684
 
#define SETPVSBIT(pvs,b) ((b) >= 0 ? ((pvs)[(b) >> 3] |= (1 << ((b) & 7))) : false)
685
 
#define CLEARPVSBIT(pvs,b) ((b) >= 0 ? ((pvs)[(b) >> 3] &= ~(1 << ((b) & 7))) : false)
686
 
 
687
 
#endif
688