shithub: qk1

Download patch

ref: 649706d1842fc88845411bba598db8ac8534cc48
parent: 86d9d6b63def9020078dc2b1796ed0eb2022d8f1
author: Sigrid Solveig Haflínudóttir <sigrid@ftrv.se>
date: Mon Oct 16 16:54:57 EDT 2023

R_RecursiveClipBPoly, R_DrawSolidClippedSubmodelPolygons: simplify just a bit

--- a/r_bsp.c
+++ b/r_bsp.c
@@ -148,6 +148,7 @@
 	mvertex_t	*pvert, *plastvert, *ptvert;
 	mnode_t		*pn;
 
+next:
 	psideedges[0] = psideedges[1] = nil;
 
 	makeclippededge = false;
@@ -155,8 +156,7 @@
 // transform the BSP plane into model space
 // FIXME: cache these?
 	splitplane = pnode->plane;
-	tplane.dist = splitplane->dist -
-			DotProduct(r_entorigin, splitplane->normal);
+	tplane.dist = splitplane->dist - DotProduct(r_entorigin, splitplane->normal);
 	tplane.normal[0] = DotProduct (entity_rotation[0], splitplane->normal);
 	tplane.normal[1] = DotProduct (entity_rotation[1], splitplane->normal);
 	tplane.normal[2] = DotProduct (entity_rotation[2], splitplane->normal);
@@ -172,20 +172,12 @@
 		lastdist = DotProduct (plastvert->position, tplane.normal) -
 				   tplane.dist;
 
-		if (lastdist > 0)
-			lastside = 0;
-		else
-			lastside = 1;
-
+		lastside = lastdist <= 0;
 		pvert = pedges->v[1];
-
 		dist = DotProduct (pvert->position, tplane.normal) - tplane.dist;
+		side = dist <= 0;
+		
 
-		if (dist > 0)
-			side = 0;
-		else
-			side = 1;
-
 		if (side != lastside)
 		{
 		// clipped
@@ -293,10 +285,12 @@
 						R_RenderBmodelFace (psideedges[i], psurf);
 					}
 				}
-				else
-				{
-					R_RecursiveClipBPoly (psideedges[i], pnode->children[i],
-									  psurf);
+				else if(i == 1){ // last, can skip the call
+					pedges = psideedges[i];
+					pnode = pnode->children[i];
+					goto next;
+				}else{
+					R_RecursiveClipBPoly (psideedges[i], pnode->children[i], psurf);
 				}
 			}
 		}
@@ -311,7 +305,7 @@
 */
 void R_DrawSolidClippedSubmodelPolygons (model_t *pmodel)
 {
-	int			i, j, lindex;
+	int			i, j, lindex, o;
 	vec_t		dot;
 	msurface_t	*psurf;
 	int			numsurfaces;
@@ -356,20 +350,11 @@
 				{
 				   lindex = pmodel->surfedges[psurf->firstedge+j];
 
-					if (lindex > 0)
-					{
-						pedge = &pedges[lindex];
-						pbedge[j].v[0] = &r_pcurrentvertbase[pedge->v[0]];
-						pbedge[j].v[1] = &r_pcurrentvertbase[pedge->v[1]];
-					}
-					else
-					{
+					if (o = (lindex < 0))
 						lindex = -lindex;
-						pedge = &pedges[lindex];
-						pbedge[j].v[0] = &r_pcurrentvertbase[pedge->v[1]];
-						pbedge[j].v[1] = &r_pcurrentvertbase[pedge->v[0]];
-					}
-
+					pedge = &pedges[lindex];
+					pbedge[j].v[0] = &r_pcurrentvertbase[pedge->v[o]];
+					pbedge[j].v[1] = &r_pcurrentvertbase[pedge->v[!o]];
 					pbedge[j].pnext = &pbedge[j+1];
 				}