From 9d6244ed6567619247c04106aab31af68467704f Mon Sep 17 00:00:00 2001
From: biwa <6475593+biwa@users.noreply.github.com>
Date: Sat, 11 Jul 2020 18:43:49 +0200
Subject: [PATCH] Fixed a bug where the effective size of scaled textures was
 too small under certain circumstances

---
 .../Plugins/BuilderModes/VisualModes/VisualLower.cs  |  8 +++++---
 .../BuilderModes/VisualModes/VisualMiddle3D.cs       | 10 ++++++----
 .../BuilderModes/VisualModes/VisualMiddleBack.cs     |  7 +++----
 .../BuilderModes/VisualModes/VisualMiddleDouble.cs   |  8 +++++---
 .../BuilderModes/VisualModes/VisualMiddleSingle.cs   | 12 +++++++-----
 .../Plugins/BuilderModes/VisualModes/VisualUpper.cs  | 10 ++++++----
 6 files changed, 32 insertions(+), 23 deletions(-)

diff --git a/Source/Plugins/BuilderModes/VisualModes/VisualLower.cs b/Source/Plugins/BuilderModes/VisualModes/VisualLower.cs
index 9bb865902..a86052779 100755
--- a/Source/Plugins/BuilderModes/VisualModes/VisualLower.cs
+++ b/Source/Plugins/BuilderModes/VisualModes/VisualLower.cs
@@ -125,9 +125,8 @@ namespace CodeImp.DoomBuilder.BuilderModes
 				setuponloadedtexture = 0;
 			}
 			
-			// Get texture scaled size
-			Vector2D tsz = new Vector2D(base.Texture.ScaledWidth, base.Texture.ScaledHeight);
-			tsz = tsz / tscale;
+			// Get texture scaled size. Round up, because that's apparently what GZDoom does
+			Vector2D tsz = new Vector2D(Math.Ceiling(base.Texture.ScaledWidth / tscale.x), Math.Ceiling(base.Texture.ScaledHeight / tscale.y));
 			
 			// Get texture offsets
 			Vector2D tof = new Vector2D(Sidedef.OffsetX, Sidedef.OffsetY);
@@ -143,6 +142,9 @@ namespace CodeImp.DoomBuilder.BuilderModes
 				// If the texture gets replaced with a "hires" texture it adds more fuckery
 				if (base.Texture is HiResImage)
 					tof *= tscaleAbs;
+
+				// Round up, since that's apparently what GZDoom does. Not sure if this is the right place or if it also has to be done earlier
+				tof = new Vector2D(Math.Ceiling(tof.x), Math.Ceiling(tof.y));
 			}
 
 			// Determine texture coordinates plane as they would be in normal circumstances.
diff --git a/Source/Plugins/BuilderModes/VisualModes/VisualMiddle3D.cs b/Source/Plugins/BuilderModes/VisualModes/VisualMiddle3D.cs
index 7da3145fd..74075a979 100755
--- a/Source/Plugins/BuilderModes/VisualModes/VisualMiddle3D.cs
+++ b/Source/Plugins/BuilderModes/VisualModes/VisualMiddle3D.cs
@@ -142,10 +142,9 @@ namespace CodeImp.DoomBuilder.BuilderModes
 				base.Texture = General.Map.Data.MissingTexture3D;
 				setuponloadedtexture = 0;
 			}
-			
-			// Get texture scaled size
-			Vector2D tsz = new Vector2D(base.Texture.ScaledWidth, base.Texture.ScaledHeight);
-			tsz = tsz / tscale;
+
+			// Get texture scaled size. Round up, because that's apparently what GZDoom does
+			Vector2D tsz = new Vector2D(Math.Ceiling(base.Texture.ScaledWidth / tscale.x), Math.Ceiling(base.Texture.ScaledHeight / tscale.y));
 			
 			// Get texture offsets
 			Vector2D tof = new Vector2D(Sidedef.OffsetX, Sidedef.OffsetY) + new Vector2D(sourceside.OffsetX, sourceside.OffsetY);
@@ -161,6 +160,9 @@ namespace CodeImp.DoomBuilder.BuilderModes
 				// If the texture gets replaced with a "hires" texture it adds more fuckery
 				if (base.Texture is HiResImage)
 					tof *= tscaleAbs;
+
+				// Round up, since that's apparently what GZDoom does. Not sure if this is the right place or if it also has to be done earlier
+				tof = new Vector2D(Math.Ceiling(tof.x), Math.Ceiling(tof.y));
 			}
 
 			// For Vavoom type 3D floors the ceiling is lower than floor and they are reversed.
diff --git a/Source/Plugins/BuilderModes/VisualModes/VisualMiddleBack.cs b/Source/Plugins/BuilderModes/VisualModes/VisualMiddleBack.cs
index e97ee0c23..a6775a4d1 100755
--- a/Source/Plugins/BuilderModes/VisualModes/VisualMiddleBack.cs
+++ b/Source/Plugins/BuilderModes/VisualModes/VisualMiddleBack.cs
@@ -98,10 +98,9 @@ namespace CodeImp.DoomBuilder.BuilderModes
 				base.Texture = General.Map.Data.MissingTexture3D;
 				setuponloadedtexture = 0;
 			}
-			
-			// Get texture scaled size
-			Vector2D tsz = new Vector2D(base.Texture.ScaledWidth, base.Texture.ScaledHeight);
-			tsz = tsz / tscale;
+
+			// Get texture scaled size. Round up, because that's apparently what GZDoom does
+			Vector2D tsz = new Vector2D(Math.Ceiling(base.Texture.ScaledWidth / tscale.x), Math.Ceiling(base.Texture.ScaledHeight / tscale.y));
 			
 			// Get texture offsets
 			Vector2D tof = new Vector2D(Sidedef.OffsetX, Sidedef.OffsetY) + new Vector2D(sourceside.OffsetX, sourceside.OffsetY);
diff --git a/Source/Plugins/BuilderModes/VisualModes/VisualMiddleDouble.cs b/Source/Plugins/BuilderModes/VisualModes/VisualMiddleDouble.cs
index 537bfad0b..0c5cf77a2 100755
--- a/Source/Plugins/BuilderModes/VisualModes/VisualMiddleDouble.cs
+++ b/Source/Plugins/BuilderModes/VisualModes/VisualMiddleDouble.cs
@@ -125,9 +125,8 @@ namespace CodeImp.DoomBuilder.BuilderModes
 				setuponloadedtexture = 0;
 			}
 
-			// Get texture scaled size
-			Vector2D tsz = new Vector2D(base.Texture.ScaledWidth, base.Texture.ScaledHeight);
-			tsz = tsz / tscale;
+			// Get texture scaled size. Round up, because that's apparently what GZDoom does
+			Vector2D tsz = new Vector2D(Math.Ceiling(base.Texture.ScaledWidth / tscale.x), Math.Ceiling(base.Texture.ScaledHeight / tscale.y));
 
 			// Get texture offsets
 			Vector2D tof = new Vector2D(Sidedef.OffsetX, Sidedef.OffsetY);
@@ -143,6 +142,9 @@ namespace CodeImp.DoomBuilder.BuilderModes
 				// If the texture gets replaced with a "hires" texture it adds more fuckery
 				if (base.Texture is HiResImage)
 					tof *= tscaleAbs;
+
+				// Round up, since that's apparently what GZDoom does. Not sure if this is the right place or if it also has to be done earlier
+				tof = new Vector2D(Math.Ceiling(tof.x), Math.Ceiling(tof.y));
 			}
 
 			// Determine texture coordinates plane as they would be in normal circumstances.
diff --git a/Source/Plugins/BuilderModes/VisualModes/VisualMiddleSingle.cs b/Source/Plugins/BuilderModes/VisualModes/VisualMiddleSingle.cs
index 2b9b08a6f..9af2c2dbb 100755
--- a/Source/Plugins/BuilderModes/VisualModes/VisualMiddleSingle.cs
+++ b/Source/Plugins/BuilderModes/VisualModes/VisualMiddleSingle.cs
@@ -110,11 +110,10 @@ namespace CodeImp.DoomBuilder.BuilderModes
 				base.Texture = General.Map.Data.MissingTexture3D;
 				setuponloadedtexture = 0;
 			}
-			
-			// Get texture scaled size
-			Vector2D tsz = new Vector2D(base.Texture.ScaledWidth, base.Texture.ScaledHeight);
-			tsz = tsz / tscale;
-			
+
+			// Get texture scaled size. Round up, because that's apparently what GZDoom does
+			Vector2D tsz = new Vector2D(Math.Ceiling(base.Texture.ScaledWidth / tscale.x), Math.Ceiling(base.Texture.ScaledHeight / tscale.y));
+
 			// Get texture offsets
 			Vector2D tof = new Vector2D(Sidedef.OffsetX, Sidedef.OffsetY);
 
@@ -129,6 +128,9 @@ namespace CodeImp.DoomBuilder.BuilderModes
 				// If the texture gets replaced with a "hires" texture it adds more fuckery
 				if (base.Texture is HiResImage)
 					tof *= tscaleAbs;
+
+				// Round up, since that's apparently what GZDoom does. Not sure if this is the right place or if it also has to be done earlier
+				tof = new Vector2D(Math.Ceiling(tof.x), Math.Ceiling(tof.y));
 			}
 
 			// Determine texture coordinates plane as they would be in normal circumstances.
diff --git a/Source/Plugins/BuilderModes/VisualModes/VisualUpper.cs b/Source/Plugins/BuilderModes/VisualModes/VisualUpper.cs
index 1bdc68aad..36ffc8438 100755
--- a/Source/Plugins/BuilderModes/VisualModes/VisualUpper.cs
+++ b/Source/Plugins/BuilderModes/VisualModes/VisualUpper.cs
@@ -126,10 +126,9 @@ namespace CodeImp.DoomBuilder.BuilderModes
 				setuponloadedtexture = 0;
 			}
 
-			// Get texture scaled size
-			Vector2D tsz = new Vector2D(base.Texture.ScaledWidth, base.Texture.ScaledHeight);
-			tsz = tsz / tscale;
-			
+			// Get texture scaled size. Round up, because that's apparently what GZDoom does
+			Vector2D tsz = new Vector2D(Math.Ceiling(base.Texture.ScaledWidth / tscale.x), Math.Ceiling(base.Texture.ScaledHeight / tscale.y));
+
 			// Get texture offsets
 			Vector2D tof = new Vector2D(Sidedef.OffsetX, Sidedef.OffsetY);
 
@@ -144,6 +143,9 @@ namespace CodeImp.DoomBuilder.BuilderModes
 				// If the texture gets replaced with a "hires" texture it adds more fuckery
 				if (base.Texture is HiResImage)
 					tof *= tscaleAbs;
+
+				// Round up, since that's apparently what GZDoom does. Not sure if this is the right place or if it also has to be done earlier
+				tof = new Vector2D(Math.Ceiling(tof.x), Math.Ceiling(tof.y));
 			}
 
 			// Determine texture coordinates plane as they would be in normal circumstances.
-- 
GitLab