Commit Graph

313 Commits

Author SHA1 Message Date
Kevin Shanahan e3a5b57ba4 qbsp: add "-forcegoodtree" command line option
Normally we build a fast, unoptimized bsp tree for the world before
culling outside surfaces.  This command line switch forces the use of
the more expensive algorithm for this processing stage.  Seems to have
a positive effect on the final BSP in terms of reduced marksurfaces
and smaller file size, at the expense of longer processing time.

Marked experimental for now, as it may be removed later (either by
making this behaviour the default or removing it altogether).

Credit to Rebb from func_msgboard for implementing this tweak first in
his qbsp util.

Signed-off-by: Kevin Shanahan <kmshanah@disenchant.net>
2013-06-25 13:59:24 +09:30
Kevin Shanahan 7882af13a9 qbsp: replace global face list with local in tjunc_fix_r
Explicitly pass the face list around to be added to as needed instead
of implicit reference to the global 'newlist'.

Signed-off-by: Kevin Shanahan <kmshanah@disenchant.net>
2013-06-25 11:00:24 +09:30
Kevin Shanahan 06166f43d8 qbsp: allocate the superface for tjunc fixes dynamically
Remove the global static buffer and allocate the superface when
processing tjuncs.  Also check that we are not overflowing the buffer
before adding more vertices - probably something went wrong if this
ever overflows, so better to crash with a definite error than scribble
random memory.

Signed-off-by: Kevin Shanahan <kmshanah@disenchant.net>
2013-06-25 10:39:00 +09:30
Kevin Shanahan 53a340ff04 qbsp: trivial typo in comment
Signed-off-by: Kevin Shanahan <kmshanah@disenchant.net>
2013-06-24 14:04:23 +09:30
Kevin Shanahan 83b54b90f7 qbsp: improve calculation of allocation for dmiptexlump
Use offsetof for the count/offsets and tidy up the local comments
while we're at it.

Signed-off-by: Kevin Shanahan <kmshanah@disenchant.net>
2013-06-24 14:00:58 +09:30
Kevin Shanahan 7a65efbc00 qbsp: define offsetof to builtin if not defined
Signed-off-by: Kevin Shanahan <kmshanah@disenchant.net>
2013-06-24 13:58:58 +09:30
Kevin Shanahan ff9bb3eab0 qbsp: tweak T_EPSILON to be greater than EQUAL_EPSILON
The way wedge_t and wvert_t were hashed and compared was resulting in
FixFaceEdges being able to get stuck in a loop adding verticies to a face
if two consecutive verticies were very close to EQUAL_EPSILON apart.
Avoid these problems by tweaking T_EPSILON to be slightly wider than
EQUAL_EPSILON.

Signed-off-by: Kevin Shanahan <kmshanah@disenchant.net>
2013-06-23 14:22:13 +09:30
Kevin Shanahan 6d6a787185 qbsp: comment wvert_t and wedge_t structures
Took me some time to work out what this was all representing and that t
was the parameter to the parametric equations of the edge's line in 3-d
space.  May as well make it easier for others and my future self.

Signed-off-by: Kevin Shanahan <kmshanah@disenchant.net>
2013-06-23 14:20:54 +09:30
Kevin Shanahan 3cfc4a27cc qbsp: access f->w through local pointer in SplitFaceForTjunc
No functional changes, just making the previous cleanup more consistent.
Pointer is non-const now, but no matter.

Signed-off-by: Kevin Shanahan <kmshanah@disenchant.net>
2013-06-23 14:19:50 +09:30
Kevin Shanahan 91ae3d16d9 qbsp: cleanups in SplitFaceForTjunc
Mainly tidy up long lines and rename dir/test variables to edgevec[2]
since these are the edge vectors we are testing the angles between.

Signed-off-by: Kevin Shanahan <kmshanah@disenchant.net>
2013-06-23 11:37:40 +09:30
Kevin Shanahan 72fd4caab7 qbsp: rename wedge_t locals from 'w' to 'edge'
Since 'w' is commonly used for a winding variable, this makes the code
harder to read.  Use the name 'edge' instead for these tjunc local types.

Signed-off-by: Kevin Shanahan <kmshanah@disenchant.net>
2013-06-23 11:35:28 +09:30
Kevin Shanahan 523f927b8e qbsp: trivial cleanups in FaceSide
Signed-off-by: Kevin Shanahan <kmshanah@disenchant.net>
2013-06-23 10:56:41 +09:30
Kevin Shanahan 550b883de2 qbsp: more tjunc cleanups; braces and comments
Signed-off-by: Kevin Shanahan <kmshanah@disenchant.net>
2013-06-22 20:59:42 +09:30
Kevin Shanahan 46c990c617 qbsp: trivial cleanups in SplitFaceForTjunc
Rename 'v' local to 'angle' and re-format some comments.

Signed-off-by: Kevin Shanahan <kmshanah@disenchant.net>
2013-06-22 20:58:31 +09:30
Kevin Shanahan 8939d1f6db qbsp: fix adding animated textures for alt-anim textured brushes
If brushes in the map are textured with alt-animations, and the second
character (i.e. the 'a' in +abutton) is lower case then we have the
lowercase texture name in the miptex list, but when we add alt textures we
use the uppercase, so it gets duplicated.  Duplicated animating textures
cause most engines to exit with an error.

Since the map file could use uppercase texture names as well, really we
should either be normalizing texture names to upper or lower case, or we
need to do case-insensitive matching - so I just changed to
case-insensitive matching.

Signed-off-by: Kevin Shanahan <kmshanah@disenchant.net>
2013-04-25 21:43:59 +09:30
Kevin Shanahan 7caeafb714 trivial: pad counts to 8 digits, sizes to 10 in output
Also do a quick sweep of the source and consistently use %d instead of
%i (no real difference, but just pick one).

Signed-off-by: Kevin Shanahan <kmshanah@disenchant.net>
2013-04-24 15:18:01 +09:30
Kevin Shanahan 414d3dda51 qbsp: add fflush back for msgScree
Otherwise progress output doesn't show on unix terminals.

Signed-off-by: Kevin Shanahan <kmshanah@disenchant.net>
2013-04-24 15:05:07 +09:30
Kevin Shanahan 47d2b9841b qbsp: use 5 spaces instead of tab to pad msgStat
Signed-off-by: Kevin Shanahan <kmshanah@disenchant.net>
2013-04-24 15:04:35 +09:30
Kevin Shanahan 280df62f55 qbsp: fix MidpointWinding bug, which fixes the bad leak lines!
Signed-off-by: Kevin Shanahan <kmshanah@disenchant.net>
2013-04-24 08:54:26 +09:30
Kevin Shanahan 653daa111a qbsp: invert sense of fillnode side initialisation
Signed-off-by: Kevin Shanahan <kmshanah@disenchant.net>
2013-04-24 07:02:38 +09:30
Kevin Shanahan 1e39a7e614 qbsp: factor out leafnode intersection from LineIntersect_r
Signed-off-by: Kevin Shanahan <kmshanah@disenchant.net>
2013-04-24 07:01:37 +09:30
Kevin Shanahan 4543817f59 qbsp: use a memset to simplify leakstate initialization
Signed-off-by: Kevin Shanahan <kmshanah@disenchant.net>
2013-04-24 07:00:34 +09:30
Kevin Shanahan 4c6142e97f qbsp: use the common logfile code
Not too intrusive, since the Message() layer still acts as a shim
here.  Most of the changes are for the Makefile.  Qbsp now links to
the threading code as a result, but no thread support... yet!

Signed-off-by: Kevin Shanahan <kmshanah@disenchant.net>
2013-04-23 15:48:32 +09:30
Kevin Shanahan bf9bc549d2 qbsp: remove unneccessary extern from function declarations
Signed-off-by: Kevin Shanahan <kmshanah@disenchant.net>
2013-04-23 14:41:54 +09:30
Kevin Shanahan 37f87a28be vis, qbsp: improve robustness of ClipWinding/DivideWinding
Carry over some correctness fixes from recent changes to vis into the
qbsp versions of ClipWinding and make the implementations more
consistent overall.

Most importantly:
* Ensure we always have allocated one extra dists/sides slot for wrap around
* Check we have space for a new vertex every time we try to add one

Signed-off-by: Kevin Shanahan <kmshanah@disenchant.net>
2013-04-23 14:00:31 +09:30
Kevin Shanahan 347020879d qbsp: rename Error_() to Error()
Signed-off-by: Kevin Shanahan <kmshanah@disenchant.net>
2013-04-22 20:21:17 +09:30
Kevin Shanahan 51bed53570 qbsp: remove remaining enum errors
Remove the enum Error() function and global error strings as well.

Signed-off-by: Kevin Shanahan <kmshanah@disenchant.net>
2013-04-22 20:15:09 +09:30
Kevin Shanahan ea5e46f9df qbsp: replace error enums in surfaces.c, solidbsp.c
Signed-off-by: Kevin Shanahan <kmshanah@disenchant.net>
2013-04-22 19:16:53 +09:30
Kevin Shanahan b9fa895988 qbsp: replace enum errors in portals.c
Signed-off-by: Kevin Shanahan <kmshanah@disenchant.net>
2013-04-22 18:47:36 +09:30
Kevin Shanahan 15da0d818a qbsp: replace enum errors in parser.c
Signed-off-by: Kevin Shanahan <kmshanah@disenchant.net>
2013-04-22 18:40:13 +09:30
Kevin Shanahan 0e586916b1 qbsp: replace error enums in outside.c, merge.c
Signed-off-by: Kevin Shanahan <kmshanah@disenchant.net>
2013-04-22 18:32:52 +09:30
Kevin Shanahan c01397ed5b qbsp: replace enum errors in file.c and wad.c
Signed-off-by: Kevin Shanahan <kmshanah@disenchant.net>
2013-04-22 18:23:24 +09:30
Kevin Shanahan 02e81df39b qbsp: replace error enums in csg4.c
Signed-off-by: Kevin Shanahan <kmshanah@disenchant.net>
2013-04-22 18:20:02 +09:30
Kevin Shanahan 58b33cc3d4 qbsp: remplace error enums in bspfile.c
Overlapped with outside.c and portals.c for some of the file errors.

Signed-off-by: Kevin Shanahan <kmshanah@disenchant.net>
2013-04-22 18:15:38 +09:30
Kevin Shanahan 7203d3407b qbsp: replace enum errors in brush.c
One shared message in surfaces.c replaced as well.

Signed-off-by: Kevin Shanahan <kmshanah@disenchant.net>
2013-04-22 17:59:36 +09:30
Kevin Shanahan d5adbcd8ca qbsp: replace enum errors in qbsp.c
Signed-off-by: Kevin Shanahan <kmshanah@disenchant.net>
2013-04-22 17:39:56 +09:30
Kevin Shanahan 30caae09e5 qbsp: re-factor ParseBrush into smaller pieces
Factor out some of the processing involved with parsing a brush.  When
checking for duplicate planes, use the same "PlaneEqual" functions as
used in brush.c.

Replace the enum style errors with the new Error_ function for all of
map.c so the error string is at the call site.

Signed-off-by: Kevin Shanahan <kmshanah@disenchant.net>
2013-04-22 17:33:16 +09:30
Kevin Shanahan 39ccae145a qbsp: create an Error() function similar to the other tools
Call it Error_() for now while I work on transitioning away from the
arrays of global strings hidden away by error enums.

Signed-off-by: Kevin Shanahan <kmshanah@disenchant.net>
2013-04-22 11:40:22 +09:30
Kevin Shanahan bb02e6d20a qbsp: fix portal generation mixed water/empty detail clusters
We don't want to terminate the recursion in ClusterContents when we reach
a non-detail separator because we need to know the contents of the leafs!
This was working okay for simple cases but fails when the detail clusters
become more complex.

Signed-off-by: Kevin Shanahan <kmshanah@disenchant.net>
2013-04-21 13:05:11 +09:30
Kevin Shanahan fa93a21598 qbsp: fix surfedge corruption when using skip surfaces
Don't count skip surface verticies at all in CountData_r because this
count actually gets used as the surfedge count and we need that to be
precise.

Don't try to save memory be allocating less verticies than edges, even
though many will probably be shared.  The saving is not that significant
anyway.

Signed-off-by: Kevin Shanahan <kmshanah@disenchant.net>
2013-04-21 10:05:17 +09:30
Kevin Shanahan 4b10bd23d9 qbsp: remove global progress counter for MakeFaceEdges
Signed-off-by: Kevin Shanahan <kmshanah@disenchant.net>
2013-04-19 16:53:54 +09:30
Kevin Shanahan 2a93375e0e qbsp: small cleanup in MakeFaceEdges
Signed-off-by: Kevin Shanahan <kmshanah@disenchant.net>
2013-04-19 14:43:35 +09:30
Kevin Shanahan 683a894290 qbsp: trivial cleanups in GrowNodeRegion_r
Signed-off-by: Kevin Shanahan <kmshanah@disenchant.net>
2013-04-19 11:28:54 +09:30
Kevin Shanahan 8e57b7c9e6 qbsp: factor out special texture name recognition
Signed-off-by: Kevin Shanahan <kmshanah@disenchant.net>
2013-04-19 11:28:11 +09:30
Kevin Shanahan 3dc06c6f21 qbsp: add a -noskip option for troubleshooting skip related problems
Signed-off-by: Kevin Shanahan <kmshanah@disenchant.net>
2013-04-19 09:48:43 +09:30
Kevin Shanahan 7e6474c03d qbsp: keep verticies from skip/hint faces in vertex count
We still end up short if we just discard these counts - still don't
need faces for them, but every edge could be real unless it's shared
with another skip face.

Signed-off-by: Kevin Shanahan <kmshanah@disenchant.net>
2013-04-18 12:58:46 +09:30
Kevin Shanahan cd188ebc99 qbsp: increase unique vertex estimate to cope with skip faces
The old assumption about unique verticies is sometimes untrue when
skip faces are included in the map.  Be more generous with the vertex
memory allocation. This is not an area of peak memory usage anyway, so
shouldn't be a big deal.

Signed-off-by: Kevin Shanahan <kmshanah@disenchant.net>
2013-04-18 08:21:27 +09:30
Kevin Shanahan dec714eac9 qbsp: add hintskip texture support
Signed-off-by: Kevin Shanahan <kmshanah@disenchant.net>
2013-04-04 13:30:47 +10:30
Kevin Shanahan f1396045c6 qbsp: support *waterskip, *slimeskip and *lavaskip
Extend skip support to recognise the liquid skip texturenames the same as
metlslime's "newskip" utility.  Add documentation and describe hint
surfaces (briefly) as well.

Signed-off-by: Kevin Shanahan <kmshanah@disenchant.net>
2013-04-04 12:59:09 +10:30
Kevin Shanahan dce122ea3a qbsp: fix loading func_group/detail brushes into worldspawn
The old logic did not deal properly with the case where the source entity
did not add any brushes.

Signed-off-by: Kevin Shanahan <kmshanah@disenchant.net>
2013-04-04 10:18:39 +10:30