qbsp: don't output skip surfaces in the bsp file

* Don't create edges in MakeFaceEdges
* Don't output faces in GrowNodeRegions
* Don't output marksurfaces in CountLeaves/ExportLeaf

Signed-off-by: Kevin Shanahan <kmshanah@disenchant.net>
This commit is contained in:
Kevin Shanahan 2013-03-05 14:00:23 +10:30
parent a37ee84d17
commit 38722f9eab
2 changed files with 36 additions and 22 deletions

View File

@ -333,13 +333,17 @@ MakeFaceEdges_r
static void
MakeFaceEdges_r(mapentity_t *ent, node_t *node)
{
const texinfo_t *texinfo = pWorldEnt->lumps[BSPTEXINFO].data;
face_t *f;
if (node->planenum == PLANENUM_LEAF)
return;
for (f = node->faces; f; f = f->next)
for (f = node->faces; f; f = f->next) {
if (texinfo[f->texturenum].flags & TEX_SKIP)
continue;
FindFaceEdges(ent, f);
}
// Print progress
iNodes++;
@ -360,6 +364,7 @@ GrowNodeRegion_r(mapentity_t *ent, node_t *node)
dface_t *r;
face_t *f;
int i;
const texinfo_t *texinfo = pWorldEnt->lumps[BSPTEXINFO].data;
struct lumpdata *surfedges = &ent->lumps[BSPSURFEDGE];
struct lumpdata *faces = &ent->lumps[BSPFACE];
@ -369,8 +374,8 @@ GrowNodeRegion_r(mapentity_t *ent, node_t *node)
node->firstface = map.cTotal[BSPFACE];
for (f = node->faces; f; f = f->next) {
// if (f->outputnumber != -1)
// continue; // allready grown into an earlier region
if (texinfo[f->texturenum].flags & TEX_SKIP)
continue;
// emit a region
f->outputnumber = map.cTotal[BSPFACE];
@ -411,12 +416,15 @@ CountData_r
static void
CountData_r(mapentity_t *ent, node_t *node)
{
const texinfo_t *texinfo = pWorldEnt->lumps[BSPTEXINFO].data;
face_t *f;
if (node->planenum == PLANENUM_LEAF)
return;
for (f = node->faces; f; f = f->next) {
if (texinfo[f->texturenum].flags & TEX_SKIP)
continue;
ent->lumps[BSPFACE].count++;
ent->lumps[BSPVERTEX].count += f->w.numpoints;
}

View File

@ -226,11 +226,15 @@ static void
CountLeaves(mapentity_t *ent, node_t *node)
{
face_t **fp, *f;
const texinfo_t *texinfo = pWorldEnt->lumps[BSPTEXINFO].data;
ent->lumps[BSPLEAF].count++;
for (fp = node->markfaces; *fp; fp++)
for (fp = node->markfaces; *fp; fp++) {
if (texinfo[(*fp)->texturenum].flags & TEX_SKIP)
continue;
for (f = *fp; f; f = f->original)
ent->lumps[BSPMARKSURF].count++;
}
}
/*
@ -277,47 +281,49 @@ static void
ExportLeaf(mapentity_t *ent, node_t *node)
{
face_t **fp, *f;
dleaf_t *leaf_p;
dleaf_t *dleaf;
const texinfo_t *texinfo = pWorldEnt->lumps[BSPTEXINFO].data;
struct lumpdata *leaves = &ent->lumps[BSPLEAF];
struct lumpdata *marksurfs = &ent->lumps[BSPMARKSURF];
unsigned short *marksurfnums = marksurfs->data;
// ptr arithmetic to get correct leaf in memory
leaf_p = (dleaf_t *)leaves->data + leaves->index;
dleaf = (dleaf_t *)leaves->data + leaves->index;
leaves->index++;
map.cTotal[BSPLEAF]++;
leaf_p->contents = node->contents;
dleaf->contents = node->contents;
//
// write bounding box info
//
// VectorCopy don't work since dest are shorts
leaf_p->mins[0] = (short)node->mins[0];
leaf_p->mins[1] = (short)node->mins[1];
leaf_p->mins[2] = (short)node->mins[2];
leaf_p->maxs[0] = (short)node->maxs[0];
leaf_p->maxs[1] = (short)node->maxs[1];
leaf_p->maxs[2] = (short)node->maxs[2];
dleaf->mins[0] = (short)node->mins[0];
dleaf->mins[1] = (short)node->mins[1];
dleaf->mins[2] = (short)node->mins[2];
dleaf->maxs[0] = (short)node->maxs[0];
dleaf->maxs[1] = (short)node->maxs[1];
dleaf->maxs[2] = (short)node->maxs[2];
leaf_p->visofs = -1; // no vis info yet
dleaf->visofs = -1; // no vis info yet
// write the marksurfaces
leaf_p->firstmarksurface = map.cTotal[BSPMARKSURF];
dleaf->firstmarksurface = map.cTotal[BSPMARKSURF];
for (fp = node->markfaces; *fp; fp++) {
// emit a marksurface
f = *fp;
if (texinfo[f->texturenum].flags & TEX_SKIP)
continue;
/* emit a marksurface */
do {
*((unsigned short *)marksurfs->data + marksurfs->index) =
f->outputnumber;
marksurfnums[marksurfs->index] = f->outputnumber;
marksurfs->index++;
map.cTotal[BSPMARKSURF]++;
f = f->original; // grab tjunction split faces
f = f->original; /* grab tjunction split faces */
} while (f);
}
leaf_p->nummarksurfaces =
map.cTotal[BSPMARKSURF] - leaf_p->firstmarksurface;
dleaf->nummarksurfaces = map.cTotal[BSPMARKSURF] - dleaf->firstmarksurface;
}