From 2934ac41dab4267840fa872b5dfb4284e9df19c6 Mon Sep 17 00:00:00 2001
From: FunkyFr3sh <cc.red.alert.1@googlemail.com>
Date: Mon, 7 Jun 2021 02:59:21 +0200
Subject: [PATCH] add new .ini setting for linear upscaling with gdi renderer

---
 inc/dd.h         | 1 +
 src/config.c     | 1 +
 src/render_gdi.c | 6 ++++++
 3 files changed, 8 insertions(+)

diff --git a/inc/dd.h b/inc/dd.h
index 2a5a766..a2aa12b 100644
--- a/inc/dd.h
+++ b/inc/dd.h
@@ -112,6 +112,7 @@ typedef struct cnc_ddraw
     BOOL fixchildwindows;
     BOOL fixwndprochook;
     BOOL d3d9linear;
+    BOOL gdilinear;
     BOOL backbuffer;
     BOOL passthrough;
     int maxgameticks;
diff --git a/src/config.c b/src/config.c
index 7186ef3..3d0768c 100644
--- a/src/config.c
+++ b/src/config.c
@@ -52,6 +52,7 @@ void cfg_load()
     g_ddraw->fixchildwindows = cfg_get_bool("fixchildwindows", TRUE);
     g_ddraw->fixwndprochook = cfg_get_bool("fixwndprochook", FALSE);
     g_ddraw->d3d9linear = cfg_get_bool("d3d9linear", TRUE);
+    g_ddraw->gdilinear = cfg_get_bool("gdilinear", FALSE);
     g_ddraw->backbuffer = cfg_get_bool("backbuffer", TRUE);
     g_ddraw->passthrough = cfg_get_bool("passthrough", TRUE);
 
diff --git a/src/render_gdi.c b/src/render_gdi.c
index c3334c7..8ef5a53 100644
--- a/src/render_gdi.c
+++ b/src/render_gdi.c
@@ -80,6 +80,12 @@ DWORD WINAPI gdi_render_main(void)
                 memcpy(&g_ddraw->primary->bmi->bmiColors[0], g_ddraw->primary->palette->data_rgb, 256 * sizeof(int));
             }
 
+            if (g_ddraw->gdilinear)
+            {
+                SetStretchBltMode(g_ddraw->render.hdc, HALFTONE);
+                SetBrushOrgEx(g_ddraw->render.hdc, 0, 0, NULL);
+            }
+
             if (g_ddraw->bnet_active)
             {
                 RECT rc = { 0, 0, g_ddraw->render.width, g_ddraw->render.height };