From ea98fe3c4da09ddd8733cc386a241b806e3ca08b Mon Sep 17 00:00:00 2001 From: Christoph Oelckers 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 93ef236786..6c2dae16cb 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 5d8e35b8df..9d48c88e08 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 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 92293760ac..5037b3b0d0 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 0000000000..da0e60f53d --- /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 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 20d28d2cd3..d12254ad72 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);