From 1a790235c69833f31e915586b6358c501ef87c20 Mon Sep 17 00:00:00 2001
From: Monster Iestyn <iestynjealous@ntlworld.com>
Date: Tue, 19 May 2020 17:19:44 +0100
Subject: [PATCH] added basic culling of papersprites if tx for either is too
 large, proper clamping to be added later

also removed some commented out old code
---
 src/r_things.c | 7 +++++--
 1 file changed, 5 insertions(+), 2 deletions(-)

diff --git a/src/r_things.c b/src/r_things.c
index cd19dfa904..27a7c0bb67 100644
--- a/src/r_things.c
+++ b/src/r_things.c
@@ -1557,7 +1557,6 @@ static void R_ProjectSprite(mobj_t *thing)
 		tr_y += FixedMul(offset, sinmul);
 		tz = FixedMul(tr_x, viewcos) + FixedMul(tr_y, viewsin);
 		yscale = FixedDiv(projectiony, tz);
-		//if (yscale < 64) return; // Fix some funky visuals
 
 		tx = FixedMul(tr_x, viewsin) - FixedMul(tr_y, viewcos);
 		xscale = FixedDiv(projection, tz);
@@ -1577,7 +1576,6 @@ static void R_ProjectSprite(mobj_t *thing)
 		tr_y += FixedMul(offset2, sinmul);
 		tz2 = FixedMul(tr_x, viewcos) + FixedMul(tr_y, viewsin);
 		yscale2 = FixedDiv(projectiony, tz2);
-		//if (yscale2 < 64) return; // ditto
 
 		tx2 = FixedMul(tr_x, viewsin) - FixedMul(tr_y, viewcos);
 		xscale2 = FixedDiv(projection, tz2);
@@ -1586,6 +1584,9 @@ static void R_ProjectSprite(mobj_t *thing)
 		if (max(tz, tz2) < FixedMul(MINZ, this_scale)) // non-papersprite clipping is handled earlier
 			return;
 
+		if (tx2 < -(tz2<<2) || tx > tz<<2) // too far off the side?
+			return;
+
 		// Needs partially clipped
 		if (tz < FixedMul(MINZ, this_scale))
 		{
@@ -1606,6 +1607,8 @@ static void R_ProjectSprite(mobj_t *thing)
 			x2 = (centerxfrac + FixedMul(tx2,xscale2))>>FRACBITS;
 		}
 
+		// TODO: tx clamping
+
 		// off the right side?
 		if (x1 > viewwidth)
 			return;
-- 
GitLab