From 3fbe3d38d3b5ba1d982788e7ed96ab71c7de2bb9 Mon Sep 17 00:00:00 2001
From: Sryder13 <sryder13@gmail.com>
Date: Mon, 24 Mar 2014 20:06:13 +0000
Subject: [PATCH] OpenGL Patch Fill Fix

Patch Fill Drawing for intermission has been fixed to loop properly in
non aspect correct resolutions.
---
 src/screen.c  | 4 ++--
 src/v_video.c | 8 ++++++++
 2 files changed, 10 insertions(+), 2 deletions(-)

diff --git a/src/screen.c b/src/screen.c
index 085056065..56528a20a 100644
--- a/src/screen.c
+++ b/src/screen.c
@@ -229,7 +229,7 @@ void SCR_Startup(void)
 	vid.fdupy = FixedDiv(vid.height*FRACUNIT, BASEVIDHEIGHT*FRACUNIT);
 
 #ifdef HWRENDER
-	if (rendermode != render_opengl && rendermode != render_none) // This was just placing it incorrectly at non aspect correct resolutions, not sure if it does anything in software
+	if (rendermode != render_opengl && rendermode != render_none) // This was just placing it incorrectly at non aspect correct resolutions in opengl
 #endif
 		vid.fdupx = vid.fdupy = (vid.fdupx < vid.fdupy ? vid.fdupx : vid.fdupy);
 
@@ -275,7 +275,7 @@ void SCR_Recalc(void)
 	vid.fdupy = FixedDiv(vid.height*FRACUNIT, BASEVIDHEIGHT*FRACUNIT);
 
 #ifdef HWRENDER
-	if (rendermode != render_opengl && rendermode != render_none) // This was just placing it incorrectly at non aspect correct resolutions, not sure if it does anything in software
+	if (rendermode != render_opengl && rendermode != render_none) // This was just placing it incorrectly at non aspect correct resolutions in opengl
 #endif
 		vid.fdupx = vid.fdupy = (vid.fdupx < vid.fdupy ? vid.fdupx : vid.fdupy);
 
diff --git a/src/v_video.c b/src/v_video.c
index 032a4ec94..9ba099f1f 100644
--- a/src/v_video.c
+++ b/src/v_video.c
@@ -905,6 +905,14 @@ void V_DrawPatchFill(patch_t *pat)
 	INT32 dupz = (vid.dupx < vid.dupy ? vid.dupx : vid.dupy);
 	INT32 x, y, pw = SHORT(pat->width) * dupz, ph = SHORT(pat->height) * dupz;
 
+#ifdef HWRENDER
+	if (rendermode == render_opengl)
+	{
+		pw = FixedMul(SHORT(pat->width)*FRACUNIT, vid.fdupx)>>FRACBITS;
+		ph = FixedMul(SHORT(pat->height)*FRACUNIT, vid.fdupy)>>FRACBITS;
+	}
+#endif
+
 	for (x = 0; x < vid.width; x += pw)
 	{
 		for (y = 0; y < vid.height; y += ph)
-- 
GitLab