diff --git a/tools/qfbsp/include/solidbsp.h b/tools/qfbsp/include/solidbsp.h
index e8c06a9b0..af924bfb7 100644
--- a/tools/qfbsp/include/solidbsp.h
+++ b/tools/qfbsp/include/solidbsp.h
@@ -30,9 +30,18 @@ struct plane_s;
struct surface_s;
struct node_s;
-void DivideFacet (struct visfacet_s *in, struct plane_s *split,
- struct visfacet_s **front, struct visfacet_s **back);
+/** Calculate the bounding box of the surface.
+
+ \param surf The surface of which to calculate the bounding box.
+*/
void CalcSurfaceInfo (struct surface_s *surf);
+
+/** Partition the surfaces, creating a nice bsp.
+
+ \param surfhead The surfaces to partition.
+ \param midsplit If true, use the volume balancing heuristic rather than
+ the split balancing heuristic (false).
+*/
struct node_s *SolidBSP (struct surface_s *surfhead, qboolean midsplit);
#endif//qfbsp_solidbsp_h
diff --git a/tools/qfbsp/source/solidbsp.c b/tools/qfbsp/source/solidbsp.c
index 2d36bb7a0..fed8072af 100644
--- a/tools/qfbsp/source/solidbsp.c
+++ b/tools/qfbsp/source/solidbsp.c
@@ -48,10 +48,18 @@ int c_solid, c_empty, c_water;
qboolean usemidsplit;
-/*
- FaceSide
+/** Determine on which side of the plane a face is.
- For BSP hueristic
+ \param in The face.
+ \param split The plane.
+ \return
+ - SIDE_FRONT
+ - The face is in front of or on the plane.
+ - SIDE_BACK
+ - The face is behind or on the plane.
+ - SIDE_ON
+ - The face is on or cut by the plane.
+
*/
static int
FaceSide (face_t *in, plane_t *split)
@@ -102,10 +110,16 @@ FaceSide (face_t *in, plane_t *split)
return SIDE_ON;
}
-/*
- ChooseMidPlaneFromList
+/** Chose the best plane for dividing the bsp.
- The clipping hull BSP doesn't worry about avoiding splits
+ The clipping hull BSP doesn't worry about avoiding splits, so this
+ function tries to find the plane that gives the most even split of the
+ bounding volume.
+
+ \param surfaces The surface chain of the bsp.
+ \param mins The minimum coordinate of the boundiing box.
+ \param maxs The maximum coordinate of the boundiing box.
+ \return The chosen surface.
*/
static surface_t *
ChooseMidPlaneFromList (surface_t *surfaces, vec3_t mins, vec3_t maxs)
@@ -160,10 +174,16 @@ ChooseMidPlaneFromList (surface_t *surfaces, vec3_t mins, vec3_t maxs)
return bestsurface;
}
-/*
- ChoosePlaneFromList
+/** Choose the best plane that produces the fewest splits.
- The real BSP hueristic
+ \param surfaces The surface chain of the bsp.
+ \param mins The minimum coordinate of the boundiing box.
+ \param maxs The maximum coordinate of the boundiing box.
+ \param usefloors If false, floors will not be chosen.
+ \param usedetail If true, the plain must have structure faces, else
+ the plain must not have structure faces.
+ \return The chosen surface, or NULL if a suitable surface could
+ not be found.
*/
static surface_t *
ChoosePlaneFromList (surface_t *surfaces, vec3_t mins, vec3_t maxs,
@@ -257,11 +277,12 @@ ChoosePlaneFromList (surface_t *surfaces, vec3_t mins, vec3_t maxs,
return bestsurface;
}
-/*
- SelectPartition
+/** Select a surface on which to split the group of surfaces.
- Selects a surface from a linked list of surfaces to split the group on
- returns NULL if the surface list can not be divided any more (a leaf)
+ \param surfaces The group of surfaces.
+ \param detail Set to 1 if the selected surface has detail.
+ \return The selected surface or NULL if the list can no longer
+ be defined (ie, a leaf).
*/
static surface_t *
SelectPartition (surface_t *surfaces, int *detail)
@@ -322,13 +343,6 @@ SelectPartition (surface_t *surfaces, int *detail)
return ChoosePlaneFromList (surfaces, mins, maxs, true, true);
}
-//============================================================================
-
-/*
- CalcSurfaceInfo
-
- Calculates the bounding box
-*/
void
CalcSurfaceInfo (surface_t *surf)
{
@@ -359,6 +373,13 @@ CalcSurfaceInfo (surface_t *surf)
}
}
+/** Divide a surface by the plane.
+
+ \param in The surface to divide.
+ \param split The plane by which to divide the surface.
+ \param front Tne part of the surface in front of the plane.
+ \param back The part of the surface behind the plane.
+*/
static void
DividePlane (surface_t *in, plane_t *split, surface_t **front,
surface_t **back)
@@ -483,11 +504,11 @@ DividePlane (surface_t *in, plane_t *split, surface_t **front,
CalcSurfaceInfo (in);
}
-/*
- LinkConvexFaces
-
- Determines the contents of the leaf and creates the final list of
+/** Determine the contents of the leaf and create the final list of
original faces that have some fragment inside this leaf
+
+ \param planelist surfaces bounding the leaf.
+ \param leafnode The leaf.
*/
static void
LinkConvexFaces (surface_t *planelist, node_t *leafnode)
@@ -552,10 +573,10 @@ LinkConvexFaces (surface_t *planelist, node_t *leafnode)
leafnode->markfaces[i] = NULL; // sentinal
}
-/*
- LinkNodeFaces
+/** Return a duplicated list of all faces on surface
- Returns a duplicated list of all faces on surface
+ \param surface The surface of which to duplicate the faces.
+ \return The duplicated list.
*/
static face_t *
LinkNodeFaces (surface_t *surface)
@@ -589,6 +610,11 @@ LinkNodeFaces (surface_t *surface)
return list;
}
+/** Partition the surfaces, creating a nice bsp.
+
+ \param surfaces The surfaces to partition.
+ \param node The current node.
+*/
static void
PartitionSurfaces (surface_t *surfaces, node_t *node)
{