From ea98fe3c4da09ddd8733cc386a241b806e3ca08b Mon Sep 17 00:00:00 2001
From: Christoph Oelckers <coelckers@users.noreply.github.com>
Date: Thu, 17 May 2018 20:23:01 +0200
Subject: [PATCH] - moved the hardware independent part of custom
 postprocessing shaders from gl to hwrenderer.

---
 src/CMakeLists.txt                            |   1 +
 src/gl/shaders/gl_postprocessshader.cpp       |   4 +-
 src/gl/shaders/gl_shader.cpp                  | 136 ---------------
 .../shaders/hw_postprocessshader.cpp          | 162 ++++++++++++++++++
 .../shaders/hw_postprocessshader.h}           |   0
 src/r_data/gldefs.cpp                         |   2 +-
 6 files changed, 165 insertions(+), 140 deletions(-)
 create mode 100644 src/hwrenderer/shaders/hw_postprocessshader.cpp
 rename src/{gl/shaders/gl_postprocessshader.h => hwrenderer/shaders/hw_postprocessshader.h} (100%)

diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
index 93ef23678..6c2dae16c 100644
--- a/src/CMakeLists.txt
+++ b/src/CMakeLists.txt
@@ -1056,6 +1056,7 @@ set (PCH_SOURCES
 	hwrenderer/dynlights/hw_aabbtree.cpp
 	hwrenderer/dynlights/hw_shadowmap.cpp
 	hwrenderer/scene/hw_skydome.cpp
+	hwrenderer/shaders/hw_postprocessshader.cpp
 	hwrenderer/textures/hw_material.cpp
 	hwrenderer/textures/hw_precache.cpp
 	hwrenderer/utility/hw_clock.cpp
diff --git a/src/gl/shaders/gl_postprocessshader.cpp b/src/gl/shaders/gl_postprocessshader.cpp
index 5d8e35b8d..9d48c88e0 100644
--- a/src/gl/shaders/gl_postprocessshader.cpp
+++ b/src/gl/shaders/gl_postprocessshader.cpp
@@ -28,14 +28,12 @@
 #include "gl/renderer/gl_renderer.h"
 #include "gl/renderer/gl_postprocessstate.h"
 #include "gl/renderer/gl_renderbuffers.h"
-#include "gl/shaders/gl_postprocessshader.h"
+#include "hwrenderer/shaders/hw_postprocessshader.h"
 #include "gl/shaders/gl_postprocessshaderinstance.h"
 #include "textures/bitmap.h"
 
 CVAR(Bool, gl_custompost, true, 0)
 
-TArray<PostProcessShader> PostProcessShaders;
-
 FCustomPostProcessShaders::FCustomPostProcessShaders()
 {
 	for (unsigned int i = 0; i < PostProcessShaders.Size(); i++)
diff --git a/src/gl/shaders/gl_shader.cpp b/src/gl/shaders/gl_shader.cpp
index 92293760a..5037b3b0d 100644
--- a/src/gl/shaders/gl_shader.cpp
+++ b/src/gl/shaders/gl_shader.cpp
@@ -32,8 +32,6 @@
 #include "w_wad.h"
 #include "doomerrors.h"
 #include "cmdlib.h"
-#include "vm.h"
-#include "d_player.h"
 
 #include "gl_load/gl_interface.h"
 #include "gl/system/gl_debug.h"
@@ -41,7 +39,6 @@
 #include "gl/renderer/gl_renderer.h"
 #include "gl/renderer/gl_renderstate.h"
 #include "gl/shaders/gl_shader.h"
-#include "gl/shaders/gl_postprocessshader.h"
 #include "gl/dynlights/gl_lightbuffer.h"
 
 static bool IsGlslWhitespace(char c)
@@ -866,136 +863,3 @@ void gl_DestroyUserShaders()
 	// todo
 }
 
-static bool IsConsolePlayer(player_t *player)
-{
-	AActor *activator = player ? player->mo : nullptr;
-	if (activator == nullptr || activator->player == nullptr)
-		return false;
-	return int(activator->player - players) == consoleplayer;
-}
-
-DEFINE_ACTION_FUNCTION(_Shader, SetEnabled)
-{
-	PARAM_PROLOGUE;
-	PARAM_POINTER_DEF(player, player_t);
-	PARAM_STRING(shaderName);
-	PARAM_BOOL_DEF(value);
-
-	if (IsConsolePlayer(player))
-	{
-		for (unsigned int i = 0; i < PostProcessShaders.Size(); i++)
-		{
-			PostProcessShader &shader = PostProcessShaders[i];
-			if (shader.Name == shaderName)
-				shader.Enabled = value;
-		}
-	}
-	return 0;
-}
-
-DEFINE_ACTION_FUNCTION(_Shader, SetUniform1f)
-{
-	PARAM_PROLOGUE;
-	PARAM_POINTER_DEF(player, player_t);
-	PARAM_STRING(shaderName);
-	PARAM_STRING(uniformName);
-	PARAM_FLOAT_DEF(value);
-
-	if (IsConsolePlayer(player))
-	{
-		for (unsigned int i = 0; i < PostProcessShaders.Size(); i++)
-		{
-			PostProcessShader &shader = PostProcessShaders[i];
-			if (shader.Name == shaderName)
-			{
-				double *vec4 = shader.Uniforms[uniformName].Values;
-				vec4[0] = value;
-				vec4[1] = 0.0;
-				vec4[2] = 0.0;
-				vec4[3] = 1.0;
-			}
-		}
-	}
-	return 0;
-}
-
-DEFINE_ACTION_FUNCTION(_Shader, SetUniform2f)
-{
-	PARAM_PROLOGUE;
-	PARAM_POINTER_DEF(player, player_t);
-	PARAM_STRING(shaderName);
-	PARAM_STRING(uniformName);
-	PARAM_FLOAT_DEF(x);
-	PARAM_FLOAT_DEF(y);
-
-	if (IsConsolePlayer(player))
-	{
-		for (unsigned int i = 0; i < PostProcessShaders.Size(); i++)
-		{
-			PostProcessShader &shader = PostProcessShaders[i];
-			if (shader.Name == shaderName)
-			{
-				double *vec4 = shader.Uniforms[uniformName].Values;
-				vec4[0] = x;
-				vec4[1] = y;
-				vec4[2] = 0.0;
-				vec4[3] = 1.0;
-			}
-		}
-	}
-	return 0;
-}
-
-DEFINE_ACTION_FUNCTION(_Shader, SetUniform3f)
-{
-	PARAM_PROLOGUE;
-	PARAM_POINTER_DEF(player, player_t);
-	PARAM_STRING(shaderName);
-	PARAM_STRING(uniformName);
-	PARAM_FLOAT_DEF(x);
-	PARAM_FLOAT_DEF(y);
-	PARAM_FLOAT_DEF(z);
-
-	if (IsConsolePlayer(player))
-	{
-		for (unsigned int i = 0; i < PostProcessShaders.Size(); i++)
-		{
-			PostProcessShader &shader = PostProcessShaders[i];
-			if (shader.Name == shaderName)
-			{
-				double *vec4 = shader.Uniforms[uniformName].Values;
-				vec4[0] = x;
-				vec4[1] = y;
-				vec4[2] = z;
-				vec4[3] = 1.0;
-			}
-		}
-	}
-	return 0;
-}
-
-DEFINE_ACTION_FUNCTION(_Shader, SetUniform1i)
-{
-	PARAM_PROLOGUE;
-	PARAM_POINTER_DEF(player, player_t);
-	PARAM_STRING(shaderName);
-	PARAM_STRING(uniformName);
-	PARAM_INT_DEF(value);
-
-	if (IsConsolePlayer(player))
-	{
-		for (unsigned int i = 0; i < PostProcessShaders.Size(); i++)
-		{
-			PostProcessShader &shader = PostProcessShaders[i];
-			if (shader.Name == shaderName)
-			{
-				double *vec4 = shader.Uniforms[uniformName].Values;
-				vec4[0] = (double)value;
-				vec4[1] = 0.0;
-				vec4[2] = 0.0;
-				vec4[3] = 1.0;
-			}
-		}
-	}
-	return 0;
-}
diff --git a/src/hwrenderer/shaders/hw_postprocessshader.cpp b/src/hwrenderer/shaders/hw_postprocessshader.cpp
new file mode 100644
index 000000000..da0e60f53
--- /dev/null
+++ b/src/hwrenderer/shaders/hw_postprocessshader.cpp
@@ -0,0 +1,162 @@
+// 
+//---------------------------------------------------------------------------
+//
+// Copyright(C) 2017 Magnus Norddahl
+// All rights reserved.
+//
+// This program is free software: you can redistribute it and/or modify
+// it under the terms of the GNU Lesser General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+//
+// This program is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+// GNU Lesser General Public License for more details.
+//
+// You should have received a copy of the GNU Lesser General Public License
+// along with this program.  If not, see http://www.gnu.org/licenses/
+//
+//--------------------------------------------------------------------------
+//
+
+#include "vm.h"
+#include "d_player.h"
+#include "hwrenderer/shaders/hw_postprocessshader.h"
+
+TArray<PostProcessShader> PostProcessShaders;
+
+
+static bool IsConsolePlayer(player_t *player)
+{
+	AActor *activator = player ? player->mo : nullptr;
+	if (activator == nullptr || activator->player == nullptr)
+		return false;
+	return int(activator->player - players) == consoleplayer;
+}
+
+DEFINE_ACTION_FUNCTION(_Shader, SetEnabled)
+{
+	PARAM_PROLOGUE;
+	PARAM_POINTER_DEF(player, player_t);
+	PARAM_STRING(shaderName);
+	PARAM_BOOL_DEF(value);
+
+	if (IsConsolePlayer(player))
+	{
+		for (unsigned int i = 0; i < PostProcessShaders.Size(); i++)
+		{
+			PostProcessShader &shader = PostProcessShaders[i];
+			if (shader.Name == shaderName)
+				shader.Enabled = value;
+		}
+	}
+	return 0;
+}
+
+DEFINE_ACTION_FUNCTION(_Shader, SetUniform1f)
+{
+	PARAM_PROLOGUE;
+	PARAM_POINTER_DEF(player, player_t);
+	PARAM_STRING(shaderName);
+	PARAM_STRING(uniformName);
+	PARAM_FLOAT_DEF(value);
+
+	if (IsConsolePlayer(player))
+	{
+		for (unsigned int i = 0; i < PostProcessShaders.Size(); i++)
+		{
+			PostProcessShader &shader = PostProcessShaders[i];
+			if (shader.Name == shaderName)
+			{
+				double *vec4 = shader.Uniforms[uniformName].Values;
+				vec4[0] = value;
+				vec4[1] = 0.0;
+				vec4[2] = 0.0;
+				vec4[3] = 1.0;
+			}
+		}
+	}
+	return 0;
+}
+
+DEFINE_ACTION_FUNCTION(_Shader, SetUniform2f)
+{
+	PARAM_PROLOGUE;
+	PARAM_POINTER_DEF(player, player_t);
+	PARAM_STRING(shaderName);
+	PARAM_STRING(uniformName);
+	PARAM_FLOAT_DEF(x);
+	PARAM_FLOAT_DEF(y);
+
+	if (IsConsolePlayer(player))
+	{
+		for (unsigned int i = 0; i < PostProcessShaders.Size(); i++)
+		{
+			PostProcessShader &shader = PostProcessShaders[i];
+			if (shader.Name == shaderName)
+			{
+				double *vec4 = shader.Uniforms[uniformName].Values;
+				vec4[0] = x;
+				vec4[1] = y;
+				vec4[2] = 0.0;
+				vec4[3] = 1.0;
+			}
+		}
+	}
+	return 0;
+}
+
+DEFINE_ACTION_FUNCTION(_Shader, SetUniform3f)
+{
+	PARAM_PROLOGUE;
+	PARAM_POINTER_DEF(player, player_t);
+	PARAM_STRING(shaderName);
+	PARAM_STRING(uniformName);
+	PARAM_FLOAT_DEF(x);
+	PARAM_FLOAT_DEF(y);
+	PARAM_FLOAT_DEF(z);
+
+	if (IsConsolePlayer(player))
+	{
+		for (unsigned int i = 0; i < PostProcessShaders.Size(); i++)
+		{
+			PostProcessShader &shader = PostProcessShaders[i];
+			if (shader.Name == shaderName)
+			{
+				double *vec4 = shader.Uniforms[uniformName].Values;
+				vec4[0] = x;
+				vec4[1] = y;
+				vec4[2] = z;
+				vec4[3] = 1.0;
+			}
+		}
+	}
+	return 0;
+}
+
+DEFINE_ACTION_FUNCTION(_Shader, SetUniform1i)
+{
+	PARAM_PROLOGUE;
+	PARAM_POINTER_DEF(player, player_t);
+	PARAM_STRING(shaderName);
+	PARAM_STRING(uniformName);
+	PARAM_INT_DEF(value);
+
+	if (IsConsolePlayer(player))
+	{
+		for (unsigned int i = 0; i < PostProcessShaders.Size(); i++)
+		{
+			PostProcessShader &shader = PostProcessShaders[i];
+			if (shader.Name == shaderName)
+			{
+				double *vec4 = shader.Uniforms[uniformName].Values;
+				vec4[0] = (double)value;
+				vec4[1] = 0.0;
+				vec4[2] = 0.0;
+				vec4[3] = 1.0;
+			}
+		}
+	}
+	return 0;
+}
diff --git a/src/gl/shaders/gl_postprocessshader.h b/src/hwrenderer/shaders/hw_postprocessshader.h
similarity index 100%
rename from src/gl/shaders/gl_postprocessshader.h
rename to src/hwrenderer/shaders/hw_postprocessshader.h
diff --git a/src/r_data/gldefs.cpp b/src/r_data/gldefs.cpp
index 20d28d2cd..d12254ad7 100644
--- a/src/r_data/gldefs.cpp
+++ b/src/r_data/gldefs.cpp
@@ -44,7 +44,7 @@
 #include "g_levellocals.h"
 #include "a_dynlight.h"
 #include "textures/skyboxtexture.h"
-#include "gl/shaders/gl_postprocessshader.h"
+#include "hwrenderer/shaders/hw_postprocessshader.h"
 
 void AddLightDefaults(FLightDefaults *defaults, double attnFactor);
 void AddLightAssociation(const char *actor, const char *frame, const char *light);