From 910bd0fb221509427aee591c62608262facd2211 Mon Sep 17 00:00:00 2001
From: volte <100103+volte@users.noreply.github.com>
Date: Wed, 19 Jan 2022 11:58:12 -0500
Subject: [PATCH] Made the classic renderer ignore texture brightening settings
 (#687)

---
 Source/Core/Data/ImageData.cs | 40 +++++++++++++++++++++++++++++------
 1 file changed, 34 insertions(+), 6 deletions(-)

diff --git a/Source/Core/Data/ImageData.cs b/Source/Core/Data/ImageData.cs
index 2d0a288b5..cfd57d37b 100755
--- a/Source/Core/Data/ImageData.cs
+++ b/Source/Core/Data/ImageData.cs
@@ -80,6 +80,7 @@ namespace CodeImp.DoomBuilder.Data
 
         // GDI bitmap
         private Bitmap loadedbitmap;
+        private Bitmap uncorrectedbitmap;
         private Bitmap previewbitmap;
         private Bitmap spritepreviewbitmap;
 
@@ -178,11 +179,13 @@ namespace CodeImp.DoomBuilder.Data
                 // Clean up
                 loadedbitmap?.Dispose();
                 previewbitmap?.Dispose();
+                uncorrectedbitmap?.Dispose();
                 spritepreviewbitmap?.Dispose();
                 texture?.Dispose();
                 indexedTexture?.Dispose();
                 loadedbitmap = null;
                 previewbitmap = null;
+                uncorrectedbitmap = null;
                 spritepreviewbitmap = null;
 				texture = null;
 					
@@ -305,6 +308,7 @@ namespace CodeImp.DoomBuilder.Data
             // Do the loading
             LocalLoadResult loadResult = LocalLoadImage();
 
+            MakeUncorrectedImage(loadResult, usecolorcorrection);
             ConvertImageFormat(loadResult, usecolorcorrection);
             MakeImagePreview(loadResult);
             MakeAlphaTestImage(loadResult);
@@ -315,6 +319,8 @@ namespace CodeImp.DoomBuilder.Data
             {
                 loadResult.bitmap?.Dispose();
                 loadResult.bitmap = null;
+                loadResult.uncorrected?.Dispose();
+                loadResult.uncorrected = null;
                 onlyPreview = true;
             }
 
@@ -334,10 +340,12 @@ namespace CodeImp.DoomBuilder.Data
                     }
 
                     loadedbitmap?.Dispose();
+                    uncorrectedbitmap?.Dispose();
                     texture?.Dispose();
                     indexedTexture?.Dispose();
                     imagestate = ImageLoadState.Ready;
                     loadedbitmap = loadResult.bitmap;
+                    uncorrectedbitmap = loadResult.uncorrected;
                     alphatest = loadResult.alphatest;
                     alphatestWidth = loadResult.alphatestWidth;
                     alphatestHeight = loadResult.alphatestHeight;
@@ -390,6 +398,7 @@ namespace CodeImp.DoomBuilder.Data
 
             public Bitmap bitmap;
             public Bitmap preview;
+            public Bitmap uncorrected;
             public BitArray alphatest;
             public int alphatestWidth;
             public int alphatestHeight;
@@ -594,6 +603,22 @@ namespace CodeImp.DoomBuilder.Data
         // Dimensions of a single preview image
         const int MAX_PREVIEW_SIZE = 256; //mxd
 
+        // This makes a copy of the image before color correction or, if color correction is disabled for this image,
+        // just references the original bitmap.
+        private void MakeUncorrectedImage(LocalLoadResult loadResult, bool usecolorcorrection)
+        {
+	        if (loadResult.bitmap == null)
+		        return;
+	        if (usecolorcorrection)
+	        {
+		        loadResult.uncorrected = new Bitmap(loadResult.bitmap);
+	        }
+	        else
+	        {
+		        loadResult.uncorrected = loadResult.bitmap;
+	        }
+        }
+
         // This makes a preview for the given image and updates the image settings
         private void MakeImagePreview(LocalLoadResult loadResult)
         {
@@ -701,28 +726,31 @@ namespace CodeImp.DoomBuilder.Data
           return General.Map.Data.LoadingTexture;
       if (loadfailed)
           return General.Map.Data.FailedTexture;
-
+      
       if (imagestate == ImageLoadState.None)
       {
-          General.Map.Data.QueueLoadImage(this);
-          return General.Map.Data.LoadingTexture;
+	      General.Map.Data.QueueLoadImage(this);
+        return General.Map.Data.LoadingTexture;
       }
       
       if (loadedbitmap == null)
       {
 	      return General.Map.Data.LoadingTexture;
       }
-
-      texture = new Texture(General.Map.Graphics, loadedbitmap);
+      
       if (wantIndexed)
       {
-	      Bitmap indexedBitmap = CreateIndexedBitmap(loadedbitmap, General.Map.Data.Palette);
+	      Bitmap indexedBitmap = CreateIndexedBitmap(uncorrectedbitmap, General.Map.Data.Palette);
 	      indexedTexture = new Texture(General.Map.Graphics, indexedBitmap);
 	      indexedTexture.UserData = TEXTURE_INDEXED;
       }
+      
+      texture = new Texture(General.Map.Graphics, loadedbitmap);
 
       loadedbitmap.Dispose();
       loadedbitmap = null;
+      uncorrectedbitmap.Dispose();
+      uncorrectedbitmap = null;
 
 #if DEBUG
 			texture.Tag = name; //mxd. Helps with tracking undisposed resources...
-- 
GitLab