UFO: Alien Invasion
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Modules Pages
bspbrush.cpp File Reference
#include "bsp.h"
#include "map.h"

Go to the source code of this file.

Macros

#define TESTING_MOCK_SPLIT   1
 

Functions

static void BoundBrush (bspbrush_t *brush)
 Sets the mins/maxs based on the windings. More...
 
static void CreateBrushWindings (bspbrush_t *brush)
 makes basewindigs for sides and mins/maxs for the brush More...
 
bspbrush_tBrushFromBounds (const vec3_t mins, const vec3_t maxs)
 Creates a new axial brush. More...
 
static vec_t BrushVolume (const bspbrush_t *brush)
 Returns the volume of the given brush. More...
 
int CountBrushList (bspbrush_t *brushes)
 Returns the amount of brushes in the given brushlist. More...
 
bspbrush_tAllocBrush (int numsides)
 
void FreeBrush (bspbrush_t *brushes)
 
void FreeBrushList (bspbrush_t *brushes)
 
bspbrush_tCopyBrush (const bspbrush_t *brush)
 Duplicates the brush, the sides, and the windings. More...
 
static int TestBrushToPlanenum (bspbrush_t *brush, uint16_t planenum, int *numsplits, bool *hintsplit, int *epsilonbrush)
 
uint32_t BrushListCalcContents (bspbrush_t *brushlist)
 Collects the contentsflags of the brushes in the given list. More...
 
static int BrushMostlyOnSide (const bspbrush_t *brush, const plane_t *plane)
 Checks on which side a of plane the brush is. More...
 
static bool DoesPlaneSplitBrush (const bspbrush_t *brush, int planenum)
 Checks if the plane splits the brush. More...
 
static bool CheckPlaneAgainstVolume (int pnum, const bspbrush_t *volume)
 
side_tSelectSplitSide (bspbrush_t *brushes, bspbrush_t *volume)
 Using a heuristic, choses one of the sides out of the brushlist to partition the brushes with. More...
 
void SplitBrush (const bspbrush_t *brush, uint16_t planenum, bspbrush_t **front, bspbrush_t **back)
 Generates two new brushes, leaving the original unchanged. More...
 
void SplitBrushList (bspbrush_t *brushes, uint16_t planenum, bspbrush_t **front, bspbrush_t **back)
 
void BrushlistCalcStats (bspbrush_t *brushlist, AABB &blBox)
 Counts the faces and calculate the aabb. More...
 

Variables

int c_nodes
 
int c_nonvis
 
static int c_active_brushes
 

Macro Definition Documentation

#define TESTING_MOCK_SPLIT   1

Definition at line 352 of file bspbrush.cpp.

Function Documentation

bspbrush_t* AllocBrush ( int  numsides)
static void BoundBrush ( bspbrush_t brush)
static

Sets the mins/maxs based on the windings.

Definition at line 36 of file bspbrush.cpp.

References AABB::add(), bspbrush_s::brBox, i, winding_s::numpoints, bspbrush_s::numsides, winding_s::p, AABB::setNegativeVolume(), bspbrush_s::sides, and side_s::winding.

Referenced by CreateBrushWindings(), and SplitBrush().

bspbrush_t* BrushFromBounds ( const vec3_t  mins,
const vec3_t  maxs 
)

Creates a new axial brush.

Definition at line 87 of file bspbrush.cpp.

References AllocBrush(), CreateBrushWindings(), FindOrCreateFloatPlane(), i, bspbrush_s::numsides, side_s::planenum, bspbrush_s::sides, and VectorClear.

Referenced by BuildTree().

uint32_t BrushListCalcContents ( bspbrush_t brushlist)

Collects the contentsflags of the brushes in the given list.

Definition at line 300 of file bspbrush.cpp.

References node_s::contentFlags, mapbrush_s::contentFlags, CONTENTS_PASSABLE, CONTENTS_SOLID, i, bspbrush_s::next, bspbrush_s::numsides, bspbrush_s::original, bspbrush_s::sides, side_s::texinfo, and TEXINFO_NODE.

Referenced by LeafNode().

static int BrushMostlyOnSide ( const bspbrush_t brush,
const plane_t plane 
)
static

Checks on which side a of plane the brush is.

Todo:
Or vice versa?

Definition at line 328 of file bspbrush.cpp.

References plane_s::dist, DotProduct, i, plane_s::normal, winding_s::numpoints, bspbrush_s::numsides, winding_s::p, PSIDE_BACK, PSIDE_FRONT, node_s::side, bspbrush_s::sides, and side_s::winding.

Referenced by SplitBrush().

static vec_t BrushVolume ( const bspbrush_t brush)
static
static bool CheckPlaneAgainstVolume ( int  pnum,
const bspbrush_t volume 
)
static

Definition at line 384 of file bspbrush.cpp.

References DoesPlaneSplitBrush().

Referenced by SelectSplitSide().

bspbrush_t* CopyBrush ( const bspbrush_t brush)

Duplicates the brush, the sides, and the windings.

See also
AllocBrush

Definition at line 207 of file bspbrush.cpp.

References AllocBrush(), CopyWinding(), i, bspbrush_s::numsides, node_s::side, bspbrush_s::sides, STANDARD_NUMBER_OF_BRUSHSIDES, and side_s::winding.

Referenced by SplitBrush(), and SplitBrushList().

int CountBrushList ( bspbrush_t brushes)

Returns the amount of brushes in the given brushlist.

Definition at line 152 of file bspbrush.cpp.

References bspbrush_s::next.

Referenced by ChopBrushes().

static void CreateBrushWindings ( bspbrush_t brush)
static

makes basewindigs for sides and mins/maxs for the brush

Returns
false if the brush doesn't enclose a valid volume

Definition at line 53 of file bspbrush.cpp.

References BaseWindingForPlane(), side_s::bevel, BoundBrush(), ChopWindingInPlace(), plane_s::dist, FixWinding(), i, mapplanes, plane_s::normal, bspbrush_s::numsides, side_s::planenum, node_s::side, bspbrush_s::sides, VERB_EXTRA, Verb_Printf(), and side_s::winding.

Referenced by BrushFromBounds().

static bool DoesPlaneSplitBrush ( const bspbrush_t brush,
int  planenum 
)
static
void FreeBrushList ( bspbrush_t brushes)
See also
AllocBrush
CountBrushList

Definition at line 193 of file bspbrush.cpp.

References FreeBrush(), and bspbrush_s::next.

Referenced by BuildTree_r(), ChopBrushes(), FreeTree_r(), and SubtractBrush().

side_t* SelectSplitSide ( bspbrush_t brushes,
bspbrush_t volume 
)

Using a heuristic, choses one of the sides out of the brushlist to partition the brushes with.

Returns
nullptr if there are no valid planes to split with..

the search order goes: visible-structural, visible-detail, nonvisible-structural, nonvisible-detail. If any valid plane is available in a pass, no further passes will be tried.

Definition at line 416 of file bspbrush.cpp.

References AXIAL, side_s::bevel, c_nonvis, CheckPlaneAgainstVolume(), mapbrush_s::contentFlags, CONTENTS_DETAIL, i, mapplanes, bspbrush_s::next, bspbrush_s::numsides, bspbrush_s::original, side_s::planenum, PSIDE_BACK, PSIDE_BOTH, PSIDE_FACING, PSIDE_FRONT, bspbrush_s::side, node_s::side, bspbrush_s::sides, SURF_HINT, SURF_SKIP, side_s::surfaceFlags, Sys_Error(), TestBrushToPlanenum(), side_s::tested, bspbrush_s::testside, side_s::texinfo, TEXINFO_NODE, threadstate, side_s::visible, and side_s::winding.

Referenced by BuildTree_r().

void SplitBrush ( const bspbrush_t brush,
uint16_t  planenum,
bspbrush_t **  front,
bspbrush_t **  back 
)

Generates two new brushes, leaving the original unchanged.

Todo:
Print brush and entnum either of the brush that was splitted or the plane that was used as splitplane
Todo:
Print brush and entnum either of the brush that was split or the plane that was used as splitplane
Todo:
Print brush and entnum either of the brush that was splitted or the plane that was used as splitplane
Todo:
Print brush and entnum either of the brush that was splitted or the plane that was used as splitplane

Definition at line 544 of file bspbrush.cpp.

References AllocBrush(), BaseWindingForPlane(), BoundBrush(), bspbrush_s::brBox, BrushMostlyOnSide(), BrushVolume(), ChopWindingInPlace(), ClipWindingEpsilon(), Com_Printf(), CopyBrush(), CopyWinding(), plane_s::dist, DotProduct, FreeBrush(), i, mapplanes, MAX_WORLD_WIDTH, AABB::maxs, plane_s::normal, winding_s::numpoints, bspbrush_s::numsides, bspbrush_s::original, winding_s::p, node_s::planenum, side_s::planenum, PSIDE_BACK, PSIDE_FRONT, node_s::side, bspbrush_s::sides, side_s::tested, side_s::texinfo, TEXINFO_NODE, VERB_EXTRA, Verb_Printf(), side_s::visible, side_s::winding, WindingIsHuge(), and WindingIsTiny().

Referenced by BuildTree_r(), ClipBrushToBox(), SplitBrushList(), and SubtractBrush().

Variable Documentation

int c_active_brushes
static

Definition at line 30 of file bspbrush.cpp.

Referenced by AllocBrush(), and FreeBrush().

int c_nodes

Definition at line 27 of file tree.cpp.

Referenced by BuildTree(), BuildTree_r(), and FreeTree_r().

int c_nonvis

Definition at line 28 of file tree.cpp.

Referenced by BuildTree(), and SelectSplitSide().