From 4b82bb50dffb1e384d0c9708bcf331dfc8094fb3 Mon Sep 17 00:00:00 2001
From: Rachael Alexanderson <eruanna@drdteam.org>
Date: Sun, 10 Sep 2017 12:12:31 -0400
Subject: [PATCH 1/6] - removed scale resolutions and added vid_scalefactor to
 replace them.

---
 src/r_videoscale.cpp       | 29 +++++++++++++++--------------
 wadsrc/static/language.enu |  3 +++
 wadsrc/static/menudef.txt  | 13 ++++++-------
 3 files changed, 24 insertions(+), 21 deletions(-)

diff --git a/src/r_videoscale.cpp b/src/r_videoscale.cpp
index 7add7450d..f8ec6ab85 100644
--- a/src/r_videoscale.cpp
+++ b/src/r_videoscale.cpp
@@ -25,7 +25,7 @@
 #include "c_dispatch.h"
 #include "c_cvars.h"
 
-#define NUMSCALEMODES 11
+#define NUMSCALEMODES 5
 
 namespace
 {
@@ -41,19 +41,19 @@ namespace
 	{
 		//	isValid,	isLinear,	GetScaledWidth(),										GetScaledHeight(),											isScaled43
 		{ true,			false,		[](uint32_t Width)->uint32_t { return Width; },			[](uint32_t Height)->uint32_t { return Height; },			false	},	// 0  - Native
-		{ true,			false,		[](uint32_t Width)->uint32_t { return 320; },			[](uint32_t Height)->uint32_t { return 200; },				true	},	// 1  - 320x200
-		{ true,			true,		[](uint32_t Width)->uint32_t { return 640; },			[](uint32_t Height)->uint32_t { return 400; },				true	},	// 2  - 640x400
-		{ true,			true,		[](uint32_t Width)->uint32_t { return 1280; },			[](uint32_t Height)->uint32_t { return 800; },				true	},	// 3  - 1280x800		
-		{ false,		false,		nullptr,												nullptr,													false	},	// 4
-		{ false,		false,		nullptr,												nullptr,													false	},	// 5
-		{ false,		false,		nullptr,												nullptr,													false	},	// 6
-		{ false,		false,		nullptr,												nullptr,													false	},	// 7
-		{ true,			false,		[](uint32_t Width)->uint32_t { return Width / 2; },		[](uint32_t Height)->uint32_t { return Height / 2; },		false	},	// 8  - Half-Res
-		{ true,			true,		[](uint32_t Width)->uint32_t { return Width * 0.75; },	[](uint32_t Height)->uint32_t { return Height * 0.75; },	false	},	// 9  - Res * 0.75
-		{ true,			true,		[](uint32_t Width)->uint32_t { return Width * 2; },		[](uint32_t Height)->uint32_t { return Height * 2; },		false	},	// 10 - SSAAx2
+		{ true,			true,		[](uint32_t Width)->uint32_t { return Width; },			[](uint32_t Height)->uint32_t { return Height; },			false	},	// 1  - Native (Linear)
+		{ true,			false,		[](uint32_t Width)->uint32_t { return 320; },			[](uint32_t Height)->uint32_t { return 200; },				true	},	// 2  - 320x200
+		{ true,			false,		[](uint32_t Width)->uint32_t { return 640; },			[](uint32_t Height)->uint32_t { return 400; },				true	},	// 3  - 640x400
+		{ true,			true,		[](uint32_t Width)->uint32_t { return 1280; },			[](uint32_t Height)->uint32_t { return 800; },				true	},	// 4  - 1280x800		
 	};
 }
 
+CUSTOM_CVAR(Float, vid_scalefactor, 1.0, CVAR_ARCHIVE | CVAR_GLOBALCONFIG)
+{
+	if (self <= 0.0 || self > 2.0)
+		self = 1.0;
+}
+
 CUSTOM_CVAR(Int, vid_scalemode, 0, CVAR_ARCHIVE | CVAR_GLOBALCONFIG)
 {
 	if (self < 0 || self >= NUMSCALEMODES || vScaleTable[self].isValid == false)
@@ -64,17 +64,18 @@ CUSTOM_CVAR(Int, vid_scalemode, 0, CVAR_ARCHIVE | CVAR_GLOBALCONFIG)
 
 bool ViewportLinearScale()
 {
-	return vScaleTable[vid_scalemode].isLinear;
+	// vid_scalefactor > 1 == forced linear scale
+	return (vid_scalefactor > 1.0) ? true : vScaleTable[vid_scalemode].isLinear;
 }
 
 int ViewportScaledWidth(int width)
 {
-	return vScaleTable[vid_scalemode].GetScaledWidth(width);
+	return vScaleTable[vid_scalemode].GetScaledWidth((int)((float)width * vid_scalefactor));
 }
 
 int ViewportScaledHeight(int height)
 {
-	return vScaleTable[vid_scalemode].GetScaledHeight(height);
+	return vScaleTable[vid_scalemode].GetScaledHeight((int)((float)height * vid_scalefactor));
 }
 
 bool ViewportIsScaled43()
diff --git a/wadsrc/static/language.enu b/wadsrc/static/language.enu
index 3c20a7bfd..95a13e513 100644
--- a/wadsrc/static/language.enu
+++ b/wadsrc/static/language.enu
@@ -2193,6 +2193,7 @@ VIDMNU_ASPECTRATIO		= "Aspect ratio";
 VIDMNU_FORCEASPECT		= "Force aspect ratio";
 VIDMNU_5X4ASPECTRATIO	= "Enable 5:4 aspect ratio";
 VIDMNU_SCALEMODE		= "Resolution scale";
+VIDMNU_SCALEFACTOR		= "Scale Factor";
 VIDMNU_ENTERTEXT		= "Press ENTER to set mode";
 VIDMNU_TESTTEXT1		= "T to test mode for 5 seconds";
 VIDMNU_TESTTEXT2		= "Please wait 5 seconds...";
@@ -2378,6 +2379,8 @@ OPTVAL_VTFZDOOM				= "ZDoom (Forced)";
 OPTVAL_VTFVANILLA			= "Vanilla (Forced)";
 OPTVAL_VTAZDOOM				= "Auto (ZDoom Preferred)";
 OPTVAL_VTAVANILLA			= "Auto (Vanilla Preferred)";
+OPTVAL_SCALENEAREST			= "Scaled (Nearest)";
+OPTVAL_SCALELINEAR			= "Scaled (Linear)";
 
 // Colors
 C_BRICK					= "\cabrick";
diff --git a/wadsrc/static/menudef.txt b/wadsrc/static/menudef.txt
index 59c7946cb..38b447d44 100644
--- a/wadsrc/static/menudef.txt
+++ b/wadsrc/static/menudef.txt
@@ -1858,13 +1858,11 @@ OptionValue RatiosTFT
 }
 OptionValue ScaleModes
 {
-	0, "$OPTVAL_OFF"
-	1, "320x200"
-	2, "640x400"
-	3, "1280x800"
-	8, "0.5x"
-	9, "0.75x"
-	10, "2x SSAA"
+	0, "$OPTVAL_SCALENEAREST"
+	1, "$OPTVAL_SCALELINEAR"
+	2, "320x200"
+	3, "640x400"
+	4, "1280x800"
 }
 
 OptionMenu VideoModeMenu protected
@@ -1880,6 +1878,7 @@ OptionMenu VideoModeMenu protected
 	Option "$VIDMNU_FORCEASPECT",		"vid_aspect", "ForceRatios"
 	Option "$VIDMNU_5X4ASPECTRATIO",	"vid_tft", "YesNo"
 	Option "$VIDMNU_SCALEMODE",			"vid_scalemode", "ScaleModes"
+	Slider "$VIDMNU_SCALEFACTOR",		"vid_scalefactor", 0.25, 2.0, 0.25, 2
 	StaticText " "
 	ScreenResolution "res_0"
 	ScreenResolution "res_1"

From ea5cffdc819d80bd97fdfb771d7acc92739d01d5 Mon Sep 17 00:00:00 2001
From: nashmuhandes <nashbackslash@gmail.com>
Date: Wed, 30 Aug 2017 09:22:01 +0800
Subject: [PATCH 2/6] Added shadowmap quality setting to the dynamic light
 options menu.

---
 wadsrc/static/language.enu | 15 ++++++++-------
 wadsrc/static/menudef.txt  | 25 ++++++++++++++++++-------
 2 files changed, 26 insertions(+), 14 deletions(-)

diff --git a/wadsrc/static/language.enu b/wadsrc/static/language.enu
index 95a13e513..8448665db 100644
--- a/wadsrc/static/language.enu
+++ b/wadsrc/static/language.enu
@@ -2688,13 +2688,14 @@ GLTEXMNU_TRIMSPREDGE	= "Trim sprite edges";
 GLTEXMNU_SORTDRAWLIST 	= "Sort draw lists by texture";
 
 // Dynamic Light Options
-GLLIGHTMNU_TITLE 			= "DYNAMIC LIGHTS";
-GLLIGHTMNU_LIGHTSENABLED 	= "Dynamic Lights (OpenGL)";
-GLLIGHTMNU_LIGHTDEFS		= "Enable light definitions";
-GLLIGHTMNU_CLIPLIGHTS 		= "Clip lights";
-GLLIGHTMNU_LIGHTSPRITES 	= "Lights affect sprites";
-GLLIGHTMNU_LIGHTPARTICLES 	= "Lights affect particles";
-GLLIGHTMNU_LIGHTSHADOWMAP 	= "Light shadowmaps";
+GLLIGHTMNU_TITLE					= "DYNAMIC LIGHTS";
+GLLIGHTMNU_LIGHTSENABLED			= "Dynamic Lights (OpenGL)";
+GLLIGHTMNU_LIGHTDEFS				= "Enable light definitions";
+GLLIGHTMNU_CLIPLIGHTS				= "Clip lights";
+GLLIGHTMNU_LIGHTSPRITES				= "Lights affect sprites";
+GLLIGHTMNU_LIGHTPARTICLES			= "Lights affect particles";
+GLLIGHTMNU_LIGHTSHADOWMAP			= "Light shadowmaps";
+GLLIGHTMNU_LIGHTSHADOWMAPQUALITY	= "Shadowmap quality";
 
 // OpenGL Preferences
 GLPREFMNU_TITLE 				= "OPENGL PREFERENCES";
diff --git a/wadsrc/static/menudef.txt b/wadsrc/static/menudef.txt
index 38b447d44..f9627516a 100644
--- a/wadsrc/static/menudef.txt
+++ b/wadsrc/static/menudef.txt
@@ -2127,6 +2127,16 @@ OptionValue VRMode
 	7, "$OPTVAL_QUADBUFFERED"
 }
 
+OptionValue ShadowMapQuality
+{
+	32, "32"
+	64, "64"
+	128, "128"
+	256, "256"
+	512, "512"
+	1024, "1024"
+}
+
 OptionMenu "GLTextureGLOptions" protected
 {
 	Title "$GLTEXMNU_TITLE"
@@ -2147,13 +2157,14 @@ OptionMenu "GLTextureGLOptions" protected
 OptionMenu "GLLightOptions" protected
 {
 	Title "$GLLIGHTMNU_TITLE"
-	Option "$TCMNU_DYNLIGHTS",				"r_dynlights", "OnOff"
-	Option "$GLLIGHTMNU_LIGHTSENABLED",		gl_lights,						"OnOff"
-	Option "$GLLIGHTMNU_LIGHTDEFS",			gl_attachedlights,				"YesNo"
-	Option "$GLLIGHTMNU_CLIPLIGHTS",		gl_lights_checkside,			"YesNo"
-	Option "$GLLIGHTMNU_LIGHTSPRITES",		gl_light_sprites,				"YesNo"
-	Option "$GLLIGHTMNU_LIGHTPARTICLES",	gl_light_particles,				"YesNo"
-	Option "$GLLIGHTMNU_LIGHTSHADOWMAP",	gl_light_shadowmap,				"YesNo"
+	Option "$TCMNU_DYNLIGHTS",					"r_dynlights", "OnOff"
+	Option "$GLLIGHTMNU_LIGHTSENABLED",			gl_lights,				"OnOff"
+	Option "$GLLIGHTMNU_LIGHTDEFS",				gl_attachedlights,		"YesNo"
+	Option "$GLLIGHTMNU_CLIPLIGHTS",			gl_lights_checkside,	"YesNo"
+	Option "$GLLIGHTMNU_LIGHTSPRITES",			gl_light_sprites,		"YesNo"
+	Option "$GLLIGHTMNU_LIGHTPARTICLES",		gl_light_particles,		"YesNo"
+	Option "$GLLIGHTMNU_LIGHTSHADOWMAP",		gl_light_shadowmap,		"YesNo"
+	Option "$GLLIGHTMNU_LIGHTSHADOWMAPQUALITY", gl_shadowmap_quality,	"ShadowMapQuality"
 }
 
 OptionMenu "OpenGLOptions" protected

From 3ff15976405b53d052007af96e4a134b98fca1a4 Mon Sep 17 00:00:00 2001
From: nashmuhandes <nashbackslash@gmail.com>
Date: Thu, 31 Aug 2017 09:46:52 +0800
Subject: [PATCH 3/6] Change minimum shadowmap quality to 128.

---
 src/gl/dynlights/gl_shadowmap.cpp | 2 --
 wadsrc/static/menudef.txt         | 2 --
 2 files changed, 4 deletions(-)

diff --git a/src/gl/dynlights/gl_shadowmap.cpp b/src/gl/dynlights/gl_shadowmap.cpp
index 0f493b751..e472635fd 100644
--- a/src/gl/dynlights/gl_shadowmap.cpp
+++ b/src/gl/dynlights/gl_shadowmap.cpp
@@ -86,8 +86,6 @@ CUSTOM_CVAR(Int, gl_shadowmap_quality, 128, CVAR_ARCHIVE | CVAR_GLOBALCONFIG)
 {
 	switch (self)
 	{
-	case 32:
-	case 64:
 	case 128:
 	case 256:
 	case 512:
diff --git a/wadsrc/static/menudef.txt b/wadsrc/static/menudef.txt
index f9627516a..729a914eb 100644
--- a/wadsrc/static/menudef.txt
+++ b/wadsrc/static/menudef.txt
@@ -2129,8 +2129,6 @@ OptionValue VRMode
 
 OptionValue ShadowMapQuality
 {
-	32, "32"
-	64, "64"
 	128, "128"
 	256, "256"
 	512, "512"

From d80f9634e3973339c6d26ea3bbed12fc859c5477 Mon Sep 17 00:00:00 2001
From: nashmuhandes <nashbackslash@gmail.com>
Date: Thu, 31 Aug 2017 09:48:10 +0800
Subject: [PATCH 4/6] Change default shadowmap quality to 512 at dpJudas's
 advice (https://forum.zdoom.org/viewtopic.php?p=1016143#p1016143)

---
 src/gl/dynlights/gl_shadowmap.cpp | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/src/gl/dynlights/gl_shadowmap.cpp b/src/gl/dynlights/gl_shadowmap.cpp
index e472635fd..4ef06efa3 100644
--- a/src/gl/dynlights/gl_shadowmap.cpp
+++ b/src/gl/dynlights/gl_shadowmap.cpp
@@ -82,7 +82,7 @@ ADD_STAT(shadowmap)
 	return out;
 }
 
-CUSTOM_CVAR(Int, gl_shadowmap_quality, 128, CVAR_ARCHIVE | CVAR_GLOBALCONFIG)
+CUSTOM_CVAR(Int, gl_shadowmap_quality, 512, CVAR_ARCHIVE | CVAR_GLOBALCONFIG)
 {
 	switch (self)
 	{

From f5f7cd9fed688d0cb06d192997a9b941c9d4bc76 Mon Sep 17 00:00:00 2001
From: "alexey.lysiuk" <alexey.lysiuk@gmail.com>
Date: Mon, 11 Sep 2017 12:22:22 +0300
Subject: [PATCH 5/6] Fixed broken FOV in SetCameraToTexture() ACS function

---
 src/p_acs.cpp | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/src/p_acs.cpp b/src/p_acs.cpp
index ce21871a6..2dfbec49b 100644
--- a/src/p_acs.cpp
+++ b/src/p_acs.cpp
@@ -10041,7 +10041,7 @@ scriptwait:
 					}
 					else
 					{
-						FCanvasTextureInfo::Add (camera, picnum, ACSToDouble(STACK(1)));
+						FCanvasTextureInfo::Add (camera, picnum, STACK(1));
 					}
 				}
 				sp -= 3;

From 3e12884720c0e812e653b5ef433ec4b7dfcdcc1e Mon Sep 17 00:00:00 2001
From: "alexey.lysiuk" <alexey.lysiuk@gmail.com>
Date: Mon, 11 Sep 2017 13:14:34 +0300
Subject: [PATCH 6/6] Updated Travis CI configuration to use Clang 5.0

---
 .travis.yml | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/.travis.yml b/.travis.yml
index 3de14e1d9..7bfb4c527 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -56,15 +56,15 @@ matrix:
     - os: linux
       compiler: clang
       env:
-        - CLANG_VERSION=4.0
+        - CLANG_VERSION=5.0
         - CMAKE_OPTIONS="-DCMAKE_BUILD_TYPE=MinSizeRel -DDYN_OPENAL=NO -DDYN_SNDFILE=NO -DDYN_MPG123=NO -DDYN_FLUIDSYNTH=NO"
       addons:
         apt:
           sources:
             - ubuntu-toolchain-r-test
-            - llvm-toolchain-trusty-4.0
+            - llvm-toolchain-trusty-5.0
           packages:
-            - clang-4.0
+            - clang-5.0
             - libstdc++-5-dev
             - libsdl2-dev
             - libgme-dev