From 351d5f08e917f55f46b22369bb128c128d9c45df Mon Sep 17 00:00:00 2001 From: Miodrag Sejic Date: Sat, 7 Mar 2015 14:03:12 +0100 Subject: [PATCH] vignette_final +added: gui slider for maximum exposure of vignetting +changed: shaders to logical min/max floats this pr contains the glsl shaders as well and therefore makes the https://github.com/GarageGames/Torque3D/pull/1225 Pull Request obsolete --- .../scripts/client/postFx/postFXManager.gui | 45 ++++++++++++++++++- .../core/scripts/client/postFx/vignette.cs | 14 ++++-- .../common/postFx/vignette/VignetteP.hlsl | 10 ++--- .../common/postFx/vignette/gl/VignetteP.glsl | 41 +++++++++++++++++ .../scripts/client/postFx/postFXManager.gui | 45 ++++++++++++++++++- .../core/scripts/client/postFx/vignette.cs | 14 ++++-- .../common/postFx/vignette/VignetteP.hlsl | 10 ++--- .../common/postFx/vignette/gl/VignetteP.glsl | 41 +++++++++++++++++ 8 files changed, 200 insertions(+), 20 deletions(-) create mode 100644 Templates/Empty/game/shaders/common/postFx/vignette/gl/VignetteP.glsl create mode 100644 Templates/Full/game/shaders/common/postFx/vignette/gl/VignetteP.glsl diff --git a/Templates/Empty/game/core/scripts/client/postFx/postFXManager.gui b/Templates/Empty/game/core/scripts/client/postFx/postFXManager.gui index 306b9a03f..e0519cc00 100644 --- a/Templates/Empty/game/core/scripts/client/postFx/postFXManager.gui +++ b/Templates/Empty/game/core/scripts/client/postFx/postFXManager.gui @@ -2426,7 +2426,50 @@ isContainer = "0"; canSave = "1"; canSaveDynamicFields = "0"; - Enabled = "1"; + }; + new GuiSliderCtrl(ppOptionsVignetteVMax) { + range = "0.001 5"; + ticks = "1000"; + snap = "0"; + value = "0.6"; + position = "96 46"; + extent = "221 17"; + minExtent = "8 2"; + horizSizing = "right"; + vertSizing = "bottom"; + profile = "GuiSliderBoxProfile"; + visible = "1"; + active = "1"; + variable = "$VignettePostEffect::VMax"; + tooltipProfile = "GuiToolTipProfile"; + hovertime = "1000"; + isContainer = "0"; + canSave = "1"; + canSaveDynamicFields = "0"; + }; + new GuiTextCtrl(ppOptionsVignetteVMaxLabel) { + text = "Radius"; + maxLength = "1024"; + margin = "0 0 0 0"; + padding = "0 0 0 0"; + anchorTop = "1"; + anchorBottom = "0"; + anchorLeft = "1"; + anchorRight = "0"; + position = "26 48"; + extent = "41 18"; + minExtent = "8 2"; + horizSizing = "right"; + vertSizing = "bottom"; + profile = "GuiTextProfile"; + visible = "1"; + active = "1"; + tooltipProfile = "GuiToolTipProfile"; + tooltip = "Controls the maximum exposure of vignetting."; + hovertime = "1000"; + isContainer = "0"; + canSave = "1"; + canSaveDynamicFields = "0"; }; }; new GuiTabPageCtrl() { diff --git a/Templates/Empty/game/core/scripts/client/postFx/vignette.cs b/Templates/Empty/game/core/scripts/client/postFx/vignette.cs index 86b8ede13..9a514ce8d 100644 --- a/Templates/Empty/game/core/scripts/client/postFx/vignette.cs +++ b/Templates/Empty/game/core/scripts/client/postFx/vignette.cs @@ -20,13 +20,19 @@ // IN THE SOFTWARE. //----------------------------------------------------------------------------- -$VignettePostEffect::RadiusX = 0.6; -$VignettePostEffect::RadiusY = 0.2; +$VignettePostEffect::VMax = 0.6; +$VignettePostEffect::VMin = 0.2; singleton ShaderData( VignetteShader ) { DXVertexShaderFile = "shaders/common/postFx/postFxV.hlsl"; DXPixelShaderFile = "shaders/common/postFx/vignette/VignetteP.hlsl"; + + OGLVertexShaderFile = "shaders/common/postFx/gl//postFxV.glsl"; + OGLPixelShaderFile = "shaders/common/postFx/vignette/gl/VignetteP.glsl"; + + samplerNames[0] = "$backBuffer"; + pixVersion = 2.0; }; @@ -44,6 +50,6 @@ singleton PostEffect( VignettePostEffect ) function VignettePostEffect::setShaderConsts(%this) { - %this.setShaderConst("$radiusX", $VignettePostEffect::RadiusX); - %this.setShaderConst("$radiusY", $VignettePostEffect::RadiusY); + %this.setShaderConst("$Vmax", $VignettePostEffect::VMax); + %this.setShaderConst("$Vmin", $VignettePostEffect::VMin); } \ No newline at end of file diff --git a/Templates/Empty/game/shaders/common/postFx/vignette/VignetteP.hlsl b/Templates/Empty/game/shaders/common/postFx/vignette/VignetteP.hlsl index c67c7ed2b..c6080c6d8 100644 --- a/Templates/Empty/game/shaders/common/postFx/vignette/VignetteP.hlsl +++ b/Templates/Empty/game/shaders/common/postFx/vignette/VignetteP.hlsl @@ -24,13 +24,13 @@ #include "shadergen:/autogenConditioners.h" uniform sampler2D backBuffer : register(S0); -uniform float radiusX; -uniform float radiusY; +uniform float Vmax; +uniform float Vmin; float4 main(PFXVertToPix IN) : COLOR0 { - float4 base = tex2D(backBuffer, IN.uv0); - float dist = distance(IN.uv0, float2(0.5,0.5)) * 0.7 ; - base.rgb *= smoothstep(radiusX, radiusY, dist); + float4 base = tex2D(backBuffer, IN.uv0); + float dist = distance(IN.uv0, float2(0.5,0.5)); + base.rgb *= smoothstep(Vmax, Vmin, dist); return base; } \ No newline at end of file diff --git a/Templates/Empty/game/shaders/common/postFx/vignette/gl/VignetteP.glsl b/Templates/Empty/game/shaders/common/postFx/vignette/gl/VignetteP.glsl new file mode 100644 index 000000000..35de95c34 --- /dev/null +++ b/Templates/Empty/game/shaders/common/postFx/vignette/gl/VignetteP.glsl @@ -0,0 +1,41 @@ +//----------------------------------------------------------------------------- +// Copyright (c) 2012 GarageGames, LLC +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to +// deal in the Software without restriction, including without limitation the +// rights to use, copy, modify, merge, publish, distribute, sublicense, and/or +// sell copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS +// IN THE SOFTWARE. +//----------------------------------------------------------------------------- + +#include "../../../gl/hlslCompat.glsl" +#include "shadergen:/autogenConditioners.h" + +uniform sampler2D backBuffer; +uniform float Vmax; +uniform float Vmin; + +in vec2 uv0; +#define IN_uv0 uv0 + +out vec4 OUT_col; + +void main() +{ + vec4 base = texture(backBuffer, IN_uv0); + float dist = distance(IN_uv0, vec2(0.5,0.5)); + base.rgb *= smoothstep(Vmax, Vmin, dist); + OUT_col = base; +} \ No newline at end of file diff --git a/Templates/Full/game/core/scripts/client/postFx/postFXManager.gui b/Templates/Full/game/core/scripts/client/postFx/postFXManager.gui index 306b9a03f..e0519cc00 100644 --- a/Templates/Full/game/core/scripts/client/postFx/postFXManager.gui +++ b/Templates/Full/game/core/scripts/client/postFx/postFXManager.gui @@ -2426,7 +2426,50 @@ isContainer = "0"; canSave = "1"; canSaveDynamicFields = "0"; - Enabled = "1"; + }; + new GuiSliderCtrl(ppOptionsVignetteVMax) { + range = "0.001 5"; + ticks = "1000"; + snap = "0"; + value = "0.6"; + position = "96 46"; + extent = "221 17"; + minExtent = "8 2"; + horizSizing = "right"; + vertSizing = "bottom"; + profile = "GuiSliderBoxProfile"; + visible = "1"; + active = "1"; + variable = "$VignettePostEffect::VMax"; + tooltipProfile = "GuiToolTipProfile"; + hovertime = "1000"; + isContainer = "0"; + canSave = "1"; + canSaveDynamicFields = "0"; + }; + new GuiTextCtrl(ppOptionsVignetteVMaxLabel) { + text = "Radius"; + maxLength = "1024"; + margin = "0 0 0 0"; + padding = "0 0 0 0"; + anchorTop = "1"; + anchorBottom = "0"; + anchorLeft = "1"; + anchorRight = "0"; + position = "26 48"; + extent = "41 18"; + minExtent = "8 2"; + horizSizing = "right"; + vertSizing = "bottom"; + profile = "GuiTextProfile"; + visible = "1"; + active = "1"; + tooltipProfile = "GuiToolTipProfile"; + tooltip = "Controls the maximum exposure of vignetting."; + hovertime = "1000"; + isContainer = "0"; + canSave = "1"; + canSaveDynamicFields = "0"; }; }; new GuiTabPageCtrl() { diff --git a/Templates/Full/game/core/scripts/client/postFx/vignette.cs b/Templates/Full/game/core/scripts/client/postFx/vignette.cs index 86b8ede13..9a514ce8d 100644 --- a/Templates/Full/game/core/scripts/client/postFx/vignette.cs +++ b/Templates/Full/game/core/scripts/client/postFx/vignette.cs @@ -20,13 +20,19 @@ // IN THE SOFTWARE. //----------------------------------------------------------------------------- -$VignettePostEffect::RadiusX = 0.6; -$VignettePostEffect::RadiusY = 0.2; +$VignettePostEffect::VMax = 0.6; +$VignettePostEffect::VMin = 0.2; singleton ShaderData( VignetteShader ) { DXVertexShaderFile = "shaders/common/postFx/postFxV.hlsl"; DXPixelShaderFile = "shaders/common/postFx/vignette/VignetteP.hlsl"; + + OGLVertexShaderFile = "shaders/common/postFx/gl//postFxV.glsl"; + OGLPixelShaderFile = "shaders/common/postFx/vignette/gl/VignetteP.glsl"; + + samplerNames[0] = "$backBuffer"; + pixVersion = 2.0; }; @@ -44,6 +50,6 @@ singleton PostEffect( VignettePostEffect ) function VignettePostEffect::setShaderConsts(%this) { - %this.setShaderConst("$radiusX", $VignettePostEffect::RadiusX); - %this.setShaderConst("$radiusY", $VignettePostEffect::RadiusY); + %this.setShaderConst("$Vmax", $VignettePostEffect::VMax); + %this.setShaderConst("$Vmin", $VignettePostEffect::VMin); } \ No newline at end of file diff --git a/Templates/Full/game/shaders/common/postFx/vignette/VignetteP.hlsl b/Templates/Full/game/shaders/common/postFx/vignette/VignetteP.hlsl index c67c7ed2b..c6080c6d8 100644 --- a/Templates/Full/game/shaders/common/postFx/vignette/VignetteP.hlsl +++ b/Templates/Full/game/shaders/common/postFx/vignette/VignetteP.hlsl @@ -24,13 +24,13 @@ #include "shadergen:/autogenConditioners.h" uniform sampler2D backBuffer : register(S0); -uniform float radiusX; -uniform float radiusY; +uniform float Vmax; +uniform float Vmin; float4 main(PFXVertToPix IN) : COLOR0 { - float4 base = tex2D(backBuffer, IN.uv0); - float dist = distance(IN.uv0, float2(0.5,0.5)) * 0.7 ; - base.rgb *= smoothstep(radiusX, radiusY, dist); + float4 base = tex2D(backBuffer, IN.uv0); + float dist = distance(IN.uv0, float2(0.5,0.5)); + base.rgb *= smoothstep(Vmax, Vmin, dist); return base; } \ No newline at end of file diff --git a/Templates/Full/game/shaders/common/postFx/vignette/gl/VignetteP.glsl b/Templates/Full/game/shaders/common/postFx/vignette/gl/VignetteP.glsl new file mode 100644 index 000000000..35de95c34 --- /dev/null +++ b/Templates/Full/game/shaders/common/postFx/vignette/gl/VignetteP.glsl @@ -0,0 +1,41 @@ +//----------------------------------------------------------------------------- +// Copyright (c) 2012 GarageGames, LLC +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to +// deal in the Software without restriction, including without limitation the +// rights to use, copy, modify, merge, publish, distribute, sublicense, and/or +// sell copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS +// IN THE SOFTWARE. +//----------------------------------------------------------------------------- + +#include "../../../gl/hlslCompat.glsl" +#include "shadergen:/autogenConditioners.h" + +uniform sampler2D backBuffer; +uniform float Vmax; +uniform float Vmin; + +in vec2 uv0; +#define IN_uv0 uv0 + +out vec4 OUT_col; + +void main() +{ + vec4 base = texture(backBuffer, IN_uv0); + float dist = distance(IN_uv0, vec2(0.5,0.5)); + base.rgb *= smoothstep(Vmax, Vmin, dist); + OUT_col = base; +} \ No newline at end of file