From 39e3b2a589d8fba3b742747d910c7db6fa5de362 Mon Sep 17 00:00:00 2001 From: havoc Date: Sun, 6 Mar 2005 16:22:26 +0000 Subject: [PATCH] changed leafbrushes from pointers to ints to be consistent with leaffaces moved q3m* structs and stuff to model_brush.h git-svn-id: svn://svn.icculus.org/twilight/trunk/darkplaces@5041 d7cf8633-e32d-0410-b094-e92efae38249 --- model_brush.c | 16 ++--- model_brush.h | 167 ++++++++++++++++++++++++++++++++++++++++++++++++ model_shared.h | 169 +------------------------------------------------ 3 files changed, 176 insertions(+), 176 deletions(-) diff --git a/model_brush.c b/model_brush.c index df6a87c1..5e4202b0 100644 --- a/model_brush.c +++ b/model_brush.c @@ -4534,7 +4534,7 @@ static void Mod_Q3BSP_LoadModels(lump_t *l) static void Mod_Q3BSP_LoadLeafBrushes(lump_t *l) { int *in; - q3mbrush_t **out; + int *out; int i, n, count; in = (void *)(mod_base + l->fileofs); @@ -4551,7 +4551,7 @@ static void Mod_Q3BSP_LoadLeafBrushes(lump_t *l) n = LittleLong(*in); if (n < 0 || n >= loadmodel->brushq3.num_brushes) Host_Error("Mod_Q3BSP_LoadLeafBrushes: invalid brush index %i (%i brushes)\n", n, loadmodel->brushq3.num_brushes); - *out = loadmodel->brushq3.data_brushes + n; + *out = n; } } @@ -4856,11 +4856,11 @@ static void Mod_Q3BSP_TracePoint_RecursiveBSPNode(trace_t *trace, model_t *model leaf = (q3mleaf_t *)node; for (i = 0;i < leaf->numleafbrushes;i++) { - brush = leaf->firstleafbrush[i]->colbrushf; + brush = model->brushq3.data_brushes[leaf->firstleafbrush[i]].colbrushf; if (brush && brush->markframe != markframe && BoxesOverlap(point, point, brush->mins, brush->maxs)) { brush->markframe = markframe; - Collision_TracePointBrushFloat(trace, point, leaf->firstleafbrush[i]->colbrushf); + Collision_TracePointBrushFloat(trace, point, brush); } } // can't do point traces on curves (they have no thickness) @@ -4921,11 +4921,11 @@ static void Mod_Q3BSP_TraceLine_RecursiveBSPNode(trace_t *trace, model_t *model, leaf = (q3mleaf_t *)node; for (i = 0;i < leaf->numleafbrushes;i++) { - brush = leaf->firstleafbrush[i]->colbrushf; + brush = model->brushq3.data_brushes[leaf->firstleafbrush[i]].colbrushf; if (brush && brush->markframe != markframe && BoxesOverlap(nodesegmentmins, nodesegmentmaxs, brush->mins, brush->maxs)) { brush->markframe = markframe; - Collision_TraceLineBrushFloat(trace, linestart, lineend, leaf->firstleafbrush[i]->colbrushf, leaf->firstleafbrush[i]->colbrushf); + Collision_TraceLineBrushFloat(trace, linestart, lineend, brush, brush); if (startfrac > trace->realfraction) return; } @@ -5305,11 +5305,11 @@ static void Mod_Q3BSP_TraceBrush_RecursiveBSPNode(trace_t *trace, model_t *model leaf = (q3mleaf_t *)node; for (i = 0;i < leaf->numleafbrushes;i++) { - brush = leaf->firstleafbrush[i]->colbrushf; + brush = model->brushq3.data_brushes[leaf->firstleafbrush[i]].colbrushf; if (brush && brush->markframe != markframe && BoxesOverlap(nodesegmentmins, nodesegmentmaxs, brush->mins, brush->maxs)) { brush->markframe = markframe; - Collision_TraceBrushBrushFloat(trace, thisbrush_start, thisbrush_end, leaf->firstleafbrush[i]->colbrushf, leaf->firstleafbrush[i]->colbrushf); + Collision_TraceBrushBrushFloat(trace, thisbrush_start, thisbrush_end, brush, brush); } } if (mod_q3bsp_curves_collisions.integer) diff --git a/model_brush.h b/model_brush.h index 32e5ab65..08e54c93 100644 --- a/model_brush.h +++ b/model_brush.h @@ -709,6 +709,173 @@ typedef struct } q3dpvs_t; +// surfaceflags from bsp +#define Q3SURFACEFLAG_NODAMAGE 1 +#define Q3SURFACEFLAG_SLICK 2 +#define Q3SURFACEFLAG_SKY 4 +#define Q3SURFACEFLAG_LADDER 8 +#define Q3SURFACEFLAG_NOIMPACT 16 +#define Q3SURFACEFLAG_NOMARKS 32 +#define Q3SURFACEFLAG_FLESH 64 +#define Q3SURFACEFLAG_NODRAW 128 +#define Q3SURFACEFLAG_HINT 256 +#define Q3SURFACEFLAG_SKIP 512 +#define Q3SURFACEFLAG_NOLIGHTMAP 1024 +#define Q3SURFACEFLAG_POINTLIGHT 2048 +#define Q3SURFACEFLAG_METALSTEPS 4096 +#define Q3SURFACEFLAG_NOSTEPS 8192 +#define Q3SURFACEFLAG_NONSOLID 16384 +#define Q3SURFACEFLAG_LIGHTFILTER 32768 +#define Q3SURFACEFLAG_ALPHASHADOW 65536 +#define Q3SURFACEFLAG_NODLIGHT 131072 +#define Q3SURFACEFLAG_DUST 262144 + +// surfaceparms from shaders +#define Q3SURFACEPARM_ALPHASHADOW 1 +#define Q3SURFACEPARM_AREAPORTAL 2 +#define Q3SURFACEPARM_CLUSTERPORTAL 4 +#define Q3SURFACEPARM_DETAIL 8 +#define Q3SURFACEPARM_DONOTENTER 16 +#define Q3SURFACEPARM_FOG 32 +#define Q3SURFACEPARM_LAVA 64 +#define Q3SURFACEPARM_LIGHTFILTER 128 +#define Q3SURFACEPARM_METALSTEPS 256 +#define Q3SURFACEPARM_NODAMAGE 512 +#define Q3SURFACEPARM_NODLIGHT 1024 +#define Q3SURFACEPARM_NODRAW 2048 +#define Q3SURFACEPARM_NODROP 4096 +#define Q3SURFACEPARM_NOIMPACT 8192 +#define Q3SURFACEPARM_NOLIGHTMAP 16384 +#define Q3SURFACEPARM_NOMARKS 32768 +#define Q3SURFACEPARM_NOMIPMAPS 65536 +#define Q3SURFACEPARM_NONSOLID 131072 +#define Q3SURFACEPARM_ORIGIN 262144 +#define Q3SURFACEPARM_PLAYERCLIP 524288 +#define Q3SURFACEPARM_SKY 1048576 +#define Q3SURFACEPARM_SLICK 2197152 +#define Q3SURFACEPARM_SLIME 4194304 +#define Q3SURFACEPARM_STRUCTURAL 8388608 +#define Q3SURFACEPARM_TRANS 16777216 +#define Q3SURFACEPARM_WATER 33554432 +#define Q3SURFACEPARM_POINTLIGHT 67108864 + +// various flags from shaders +#define Q3TEXTUREFLAG_TWOSIDED 1 +#define Q3TEXTUREFLAG_ADDITIVE 2 +#define Q3TEXTUREFLAG_NOMIPMAPS 4 +#define Q3TEXTUREFLAG_NOPICMIP 8 +#define Q3TEXTUREFLAG_AUTOSPRITE 16 +#define Q3TEXTUREFLAG_AUTOSPRITE2 32 +#define Q3TEXTUREFLAG_ALPHATEST 64 + +struct q3msurface_s; +typedef struct q3mtexture_s +{ + char name[Q3PATHLENGTH]; + char firstpasstexturename[Q3PATHLENGTH]; + int surfaceflags; + int supercontents; + int surfaceparms; + int textureflags; + + int number; + skinframe_t skin; + + int numfaces; + struct q3msurface_s **facelist; + int *facenumlist; +} +q3mtexture_t; + +typedef struct q3mnode_s +{ + //this part shared between node and leaf + struct mplane_s *plane; // != NULL + struct q3mnode_s *parent; + vec3_t mins; + vec3_t maxs; + + // this part unique to node + struct q3mnode_s *children[2]; +} +q3mnode_t; + +typedef struct q3mleaf_s +{ + //this part shared between node and leaf + struct mplane_s *plane; // == NULL + struct q3mnode_s *parent; + vec3_t mins; + vec3_t maxs; + + // this part unique to leaf + int clusterindex; // -1 is not in pvs, >= 0 is pvs bit number + int areaindex; + int numleaffaces; + int *firstleafface; + int numleafbrushes; + int *firstleafbrush; +} +q3mleaf_t; + +typedef struct q3mmodel_s +{ + vec3_t mins; + vec3_t maxs; + int numfaces; + struct q3msurface_s *firstface; + int numbrushes; + struct q3mbrush_s *firstbrush; +} +q3mmodel_t; + +typedef struct q3mbrush_s +{ + struct colbrushf_s *colbrushf; + int numbrushsides; + struct q3mbrushside_s *firstbrushside; + struct q3mtexture_s *texture; +} +q3mbrush_t; + +typedef struct q3mbrushside_s +{ + struct mplane_s *plane; + struct q3mtexture_s *texture; +} +q3mbrushside_t; + +typedef struct q3meffect_s +{ + char shadername[Q3PATHLENGTH]; + struct q3mbrush_s *brush; + int unknown; // 5 or -1 +} +q3meffect_t; + +typedef struct q3msurface_s +{ + // FIXME: collisionmarkframe should be kept in a separate array + // FIXME: shadowmark should be kept in a separate array + + struct q3mtexture_s *texture; + struct q3meffect_s *effect; + rtexture_t *lightmaptexture; + int collisionmarkframe; // don't collide twice in one trace + // bounding box for culling + float mins[3]; + float maxs[3]; + + surfmesh_t mesh; + + // index into model->brush.shadowmesh + int num_firstshadowmeshtriangle; + + // used for shadow volume generation + int shadowmark; +} +q3msurface_t; + #define CHECKPVSBIT(pvs,b) ((b) >= 0 ? ((pvs)[(b) >> 3] & (1 << ((b) & 7))) : false) #define SETPVSBIT(pvs,b) ((b) >= 0 ? ((pvs)[(b) >> 3] |= (1 << ((b) & 7))) : false) #define CLEARPVSBIT(pvs,b) ((b) >= 0 ? ((pvs)[(b) >> 3] &= ~(1 << ((b) & 7))) : false) diff --git a/model_shared.h b/model_shared.h index 48491afb..18472409 100644 --- a/model_shared.h +++ b/model_shared.h @@ -290,173 +290,6 @@ typedef struct model_brushq2_s model_brushq2_t; */ -// surfaceflags from bsp -#define Q3SURFACEFLAG_NODAMAGE 1 -#define Q3SURFACEFLAG_SLICK 2 -#define Q3SURFACEFLAG_SKY 4 -#define Q3SURFACEFLAG_LADDER 8 -#define Q3SURFACEFLAG_NOIMPACT 16 -#define Q3SURFACEFLAG_NOMARKS 32 -#define Q3SURFACEFLAG_FLESH 64 -#define Q3SURFACEFLAG_NODRAW 128 -#define Q3SURFACEFLAG_HINT 256 -#define Q3SURFACEFLAG_SKIP 512 -#define Q3SURFACEFLAG_NOLIGHTMAP 1024 -#define Q3SURFACEFLAG_POINTLIGHT 2048 -#define Q3SURFACEFLAG_METALSTEPS 4096 -#define Q3SURFACEFLAG_NOSTEPS 8192 -#define Q3SURFACEFLAG_NONSOLID 16384 -#define Q3SURFACEFLAG_LIGHTFILTER 32768 -#define Q3SURFACEFLAG_ALPHASHADOW 65536 -#define Q3SURFACEFLAG_NODLIGHT 131072 -#define Q3SURFACEFLAG_DUST 262144 - -// surfaceparms from shaders -#define Q3SURFACEPARM_ALPHASHADOW 1 -#define Q3SURFACEPARM_AREAPORTAL 2 -#define Q3SURFACEPARM_CLUSTERPORTAL 4 -#define Q3SURFACEPARM_DETAIL 8 -#define Q3SURFACEPARM_DONOTENTER 16 -#define Q3SURFACEPARM_FOG 32 -#define Q3SURFACEPARM_LAVA 64 -#define Q3SURFACEPARM_LIGHTFILTER 128 -#define Q3SURFACEPARM_METALSTEPS 256 -#define Q3SURFACEPARM_NODAMAGE 512 -#define Q3SURFACEPARM_NODLIGHT 1024 -#define Q3SURFACEPARM_NODRAW 2048 -#define Q3SURFACEPARM_NODROP 4096 -#define Q3SURFACEPARM_NOIMPACT 8192 -#define Q3SURFACEPARM_NOLIGHTMAP 16384 -#define Q3SURFACEPARM_NOMARKS 32768 -#define Q3SURFACEPARM_NOMIPMAPS 65536 -#define Q3SURFACEPARM_NONSOLID 131072 -#define Q3SURFACEPARM_ORIGIN 262144 -#define Q3SURFACEPARM_PLAYERCLIP 524288 -#define Q3SURFACEPARM_SKY 1048576 -#define Q3SURFACEPARM_SLICK 2197152 -#define Q3SURFACEPARM_SLIME 4194304 -#define Q3SURFACEPARM_STRUCTURAL 8388608 -#define Q3SURFACEPARM_TRANS 16777216 -#define Q3SURFACEPARM_WATER 33554432 -#define Q3SURFACEPARM_POINTLIGHT 67108864 - -// various flags from shaders -#define Q3TEXTUREFLAG_TWOSIDED 1 -#define Q3TEXTUREFLAG_ADDITIVE 2 -#define Q3TEXTUREFLAG_NOMIPMAPS 4 -#define Q3TEXTUREFLAG_NOPICMIP 8 -#define Q3TEXTUREFLAG_AUTOSPRITE 16 -#define Q3TEXTUREFLAG_AUTOSPRITE2 32 -#define Q3TEXTUREFLAG_ALPHATEST 64 - -struct q3msurface_s; -typedef struct q3mtexture_s -{ - char name[Q3PATHLENGTH]; - char firstpasstexturename[Q3PATHLENGTH]; - int surfaceflags; - int supercontents; - int surfaceparms; - int textureflags; - - int number; - skinframe_t skin; - - int numfaces; - struct q3msurface_s **facelist; - int *facenumlist; -} -q3mtexture_t; - -typedef struct q3mnode_s -{ - //this part shared between node and leaf - struct mplane_s *plane; // != NULL - struct q3mnode_s *parent; - vec3_t mins; - vec3_t maxs; - - // this part unique to node - struct q3mnode_s *children[2]; -} -q3mnode_t; - -typedef struct q3mleaf_s -{ - //this part shared between node and leaf - struct mplane_s *plane; // == NULL - struct q3mnode_s *parent; - vec3_t mins; - vec3_t maxs; - - // this part unique to leaf - int clusterindex; // -1 is not in pvs, >= 0 is pvs bit number - int areaindex; - int numleaffaces; - int *firstleafface; - int numleafbrushes; - struct q3mbrush_s **firstleafbrush; -} -q3mleaf_t; - -typedef struct q3mmodel_s -{ - vec3_t mins; - vec3_t maxs; - int numfaces; - struct q3msurface_s *firstface; - int numbrushes; - struct q3mbrush_s *firstbrush; -} -q3mmodel_t; - -typedef struct q3mbrush_s -{ - struct colbrushf_s *colbrushf; - int numbrushsides; - struct q3mbrushside_s *firstbrushside; - struct q3mtexture_s *texture; -} -q3mbrush_t; - -typedef struct q3mbrushside_s -{ - struct mplane_s *plane; - struct q3mtexture_s *texture; -} -q3mbrushside_t; - -typedef struct q3meffect_s -{ - char shadername[Q3PATHLENGTH]; - struct q3mbrush_s *brush; - int unknown; // 5 or -1 -} -q3meffect_t; - -typedef struct q3msurface_s -{ - // FIXME: collisionmarkframe should be kept in a separate array - // FIXME: shadowmark should be kept in a separate array - - struct q3mtexture_s *texture; - struct q3meffect_s *effect; - rtexture_t *lightmaptexture; - int collisionmarkframe; // don't collide twice in one trace - // bounding box for culling - float mins[3]; - float maxs[3]; - - surfmesh_t mesh; - - // index into model->brush.shadowmesh - int num_firstshadowmeshtriangle; - - // used for shadow volume generation - int shadowmark; -} -q3msurface_t; - typedef struct model_brushq3_s { // if non-zero this is a submodel @@ -478,7 +311,7 @@ typedef struct model_brushq3_s q3mleaf_t *data_leafs; int num_leafbrushes; - q3mbrush_t **data_leafbrushes; + int *data_leafbrushes; int num_leaffaces; int *data_leaffaces; -- 2.39.2