From 38722f9eab045d9737be3a86779bc2d43c0cb386 Mon Sep 17 00:00:00 2001 From: Kevin Shanahan Date: Tue, 5 Mar 2013 14:00:23 +1030 Subject: [PATCH] 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 --- qbsp/surfaces.c | 14 +++++++++++--- qbsp/writebsp.c | 44 +++++++++++++++++++++++++------------------- 2 files changed, 36 insertions(+), 22 deletions(-) diff --git a/qbsp/surfaces.c b/qbsp/surfaces.c index 3b30ade0..e64021eb 100644 --- a/qbsp/surfaces.c +++ b/qbsp/surfaces.c @@ -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; } diff --git a/qbsp/writebsp.c b/qbsp/writebsp.c index 3caf9fc7..417fe99a 100644 --- a/qbsp/writebsp.c +++ b/qbsp/writebsp.c @@ -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; }