diff options
Diffstat (limited to 'hlsl')
-rw-r--r-- | hlsl/color.fx | 39 | ||||
-rw-r--r-- | hlsl/deconverge.fx | 56 | ||||
-rw-r--r-- | hlsl/focus.fx | 20 | ||||
-rw-r--r-- | hlsl/post.fx | 20 |
4 files changed, 44 insertions, 91 deletions
diff --git a/hlsl/color.fx b/hlsl/color.fx index e7ceeb57978..5e62dbd6d9f 100644 --- a/hlsl/color.fx +++ b/hlsl/color.fx @@ -76,28 +76,11 @@ VS_OUTPUT vs_main(VS_INPUT Input) // Post-Processing Pixel Shader //----------------------------------------------------------------------------- -uniform float RedFromRed = 1.0f; -uniform float RedFromGrn = 0.0f; -uniform float RedFromBlu = 0.0f; -uniform float GrnFromRed = 0.0f; -uniform float GrnFromGrn = 1.0f; -uniform float GrnFromBlu = 0.0f; -uniform float BluFromRed = 0.0f; -uniform float BluFromGrn = 0.0f; -uniform float BluFromBlu = 1.0f; - -uniform float RedOffset = 0.0f; -uniform float GrnOffset = 0.0f; -uniform float BluOffset = 0.0f; - -uniform float RedScale = 1.0f; -uniform float GrnScale = 1.0f; -uniform float BluScale = 1.0f; - -uniform float RedFloor = 0.0f; -uniform float GrnFloor = 0.0f; -uniform float BluFloor = 0.0f; - +uniform float3 RedRatios = float3(1.0f, 0.0f, 0.0f); +uniform float3 GrnRatios = float3(0.0f, 1.0f, 0.0f); +uniform float3 BluRatios = float3(0.0f, 0.0f, 1.0f); +uniform float3 Offset = float3(0.0f, 0.0f, 0.0f); +uniform float3 Scale = float3(1.0f, 1.0f, 1.0f); uniform float Saturation = 1.0f; float4 ps_main(PS_INPUT Input) : COLOR @@ -107,14 +90,12 @@ float4 ps_main(PS_INPUT Input) : COLOR float3 OutRGB = BaseTexel.rgb; // -- RGB Tint & Shift -- - float ShiftedRed = dot(OutRGB, float3(RedFromRed, RedFromGrn, RedFromBlu)); - float ShiftedGrn = dot(OutRGB, float3(GrnFromRed, GrnFromGrn, GrnFromBlu)); - float ShiftedBlu = dot(OutRGB, float3(BluFromRed, BluFromGrn, BluFromBlu)); + float ShiftedRed = dot(OutRGB, RedRatios); + float ShiftedGrn = dot(OutRGB, GrnRatios); + float ShiftedBlu = dot(OutRGB, BluRatios); // -- RGB Offset & Scale -- - float3 RGBScale = float3(RedScale, GrnScale, BluScale); - float3 RGBShift = float3(RedOffset, GrnOffset, BluOffset); - float3 OutTexel = float3(ShiftedRed, ShiftedGrn, ShiftedBlu) * RGBScale + RGBShift; + float3 OutTexel = float3(ShiftedRed, ShiftedGrn, ShiftedBlu) * Scale + Offset; // -- Saturation -- float3 Gray = float3(0.3f, 0.59f, 0.11f); @@ -122,7 +103,7 @@ float4 ps_main(PS_INPUT Input) : COLOR float3 OutChroma = OutTexel - OutLuma; float3 Saturated = OutLuma + OutChroma * Saturation; - return float4(OutRGB, BaseTexel.a); + return float4(Saturated, BaseTexel.a); } //----------------------------------------------------------------------------- diff --git a/hlsl/deconverge.fx b/hlsl/deconverge.fx index 38651a060d4..7121fe07b46 100644 --- a/hlsl/deconverge.fx +++ b/hlsl/deconverge.fx @@ -23,10 +23,9 @@ struct VS_OUTPUT { float4 Position : POSITION; float4 Color : COLOR0; - float2 RedCoord : TEXCOORD0; - float2 GrnCoord : TEXCOORD1; - float2 BluCoord : TEXCOORD2; - float2 TexCoord : TEXCOORD3; + float3 CoordX : TEXCOORD0; + float3 CoordY : TEXCOORD1; + float2 TexCoord : TEXCOORD2; }; struct VS_INPUT @@ -39,22 +38,17 @@ struct VS_INPUT struct PS_INPUT { float4 Color : COLOR0; - float2 RedCoord : TEXCOORD0; - float2 GrnCoord : TEXCOORD1; - float2 BluCoord : TEXCOORD2; - float2 TexCoord : TEXCOORD3; + float3 CoordX : TEXCOORD0; + float3 CoordY : TEXCOORD1; + float2 TexCoord : TEXCOORD2; }; //----------------------------------------------------------------------------- // Deconvergence Vertex Shader //----------------------------------------------------------------------------- -uniform float RedConvergeX; -uniform float RedConvergeY; -uniform float GrnConvergeX; -uniform float GrnConvergeY; -uniform float BluConvergeX; -uniform float BluConvergeY; +uniform float3 ConvergeX = float3(0.0f, 0.0f, 0.0f); +uniform float3 ConvergeY = float3(0.0f, 0.0f, 0.0f); uniform float TargetWidth; uniform float TargetHeight; @@ -65,12 +59,8 @@ uniform float RawHeight; uniform float WidthRatio; uniform float HeightRatio; -uniform float RedRadialConvergeX; -uniform float RedRadialConvergeY; -uniform float GrnRadialConvergeX; -uniform float GrnRadialConvergeY; -uniform float BluRadialConvergeX; -uniform float BluRadialConvergeY; +uniform float3 RadialConvergeX = float3(0.0f, 0.0f, 0.0f); +uniform float3 RadialConvergeY = float3(0.0f, 0.0f, 0.0f); uniform float Prescale; @@ -91,14 +81,8 @@ VS_OUTPUT vs_main(VS_INPUT Input) Output.Color = Input.Color; float2 TexCoord = Input.TexCoord; - Output.RedCoord.x = ((((TexCoord.x / Ratios.x) - 0.5f)) * (1.0f + RedRadialConvergeX / RawWidth) + 0.5f) * Ratios.x + RedConvergeX * invDims.x; - Output.GrnCoord.x = ((((TexCoord.x / Ratios.x) - 0.5f)) * (1.0f + GrnRadialConvergeX / RawWidth) + 0.5f) * Ratios.x + GrnConvergeX * invDims.x; - Output.BluCoord.x = ((((TexCoord.x / Ratios.x) - 0.5f)) * (1.0f + BluRadialConvergeX / RawWidth) + 0.5f) * Ratios.x + BluConvergeX * invDims.x; - - Output.RedCoord.y = ((((TexCoord.y / Ratios.y) - 0.5f)) * (1.0f + RedRadialConvergeY / RawHeight) + 0.5f) * Ratios.y + RedConvergeY * invDims.y; - Output.GrnCoord.y = ((((TexCoord.y / Ratios.y) - 0.5f)) * (1.0f + GrnRadialConvergeY / RawHeight) + 0.5f) * Ratios.y + GrnConvergeY * invDims.y; - Output.BluCoord.y = ((((TexCoord.y / Ratios.y) - 0.5f)) * (1.0f + BluRadialConvergeY / RawHeight) + 0.5f) * Ratios.y + BluConvergeY * invDims.y; - + Output.CoordX = ((((TexCoord.x / Ratios.x) - 0.5f)) * (1.0f + RadialConvergeX / RawWidth) + 0.5f) * Ratios.x + ConvergeX * invDims.x; + Output.CoordY = ((((TexCoord.y / Ratios.y) - 0.5f)) * (1.0f + RadialConvergeY / RawHeight) + 0.5f) * Ratios.y + ConvergeY * invDims.y; Output.TexCoord = TexCoord; return Output; @@ -120,17 +104,15 @@ float4 ps_main(PS_INPUT Input) : COLOR float2 TargetDims = float2(RawWidth, RawHeight); float2 DimOffset = 0.0f / TargetDims; float2 TexCoord = Input.TexCoord; - float2 RedCoord = Input.RedCoord; - float2 GrnCoord = Input.GrnCoord; - float2 BluCoord = Input.BluCoord; + float3 CoordX = Input.CoordX; + float3 CoordY = Input.CoordY; - RedCoord = lerp(TexCoord, RedCoord, Deconverge); - GrnCoord = lerp(TexCoord, GrnCoord, Deconverge); - BluCoord = lerp(TexCoord, BluCoord, Deconverge); + CoordX = lerp(TexCoord.x, CoordX, Deconverge); + CoordY = lerp(TexCoord.y, CoordY, Deconverge); - float RedTexel = tex2D(DiffuseSampler, RedCoord - DimOffset).r; - float GrnTexel = tex2D(DiffuseSampler, GrnCoord - DimOffset).g; - float BluTexel = tex2D(DiffuseSampler, BluCoord - DimOffset).b; + float RedTexel = tex2D(DiffuseSampler, float2(CoordX.x, CoordY.x) - DimOffset).r; + float GrnTexel = tex2D(DiffuseSampler, float2(CoordX.y, CoordY.y) - DimOffset).g; + float BluTexel = tex2D(DiffuseSampler, float2(CoordX.z, CoordY.z) - DimOffset).b; //RedTexel *= Input.RedCoord.x < (WidthRatio / RawWidth) ? 0.0f : 1.0f; //RedTexel *= Input.RedCoord.y < (HeightRatio / RawHeight) ? 0.0f : 1.0f; diff --git a/hlsl/focus.fx b/hlsl/focus.fx index c5e95baf6e8..de660af7d24 100644 --- a/hlsl/focus.fx +++ b/hlsl/focus.fx @@ -63,8 +63,7 @@ uniform float TargetHeight; uniform float WidthRatio; uniform float HeightRatio; -uniform float DefocusX; -uniform float DefocusY; +uniform float2 Defocus = float2(0.0f, 0.0f); uniform float FocusEnable; float2 Coord0Offset = float2( 0.0f, 0.0f); @@ -92,15 +91,14 @@ VS_OUTPUT vs_main(VS_INPUT Input) float2 InvTexSize = float2(1.0f / TargetWidth, 1.0f / TargetHeight); float2 TexCoord = Input.TexCoord; TexCoord = TexCoord + 0.5f * InvTexSize; - float2 DefocusVal = float2(DefocusX, DefocusY); - Output.TexCoord0 = TexCoord + Coord0Offset * InvTexSize * DefocusVal; - Output.TexCoord1 = TexCoord + Coord1Offset * InvTexSize * DefocusVal; - Output.TexCoord2 = TexCoord + Coord2Offset * InvTexSize * DefocusVal; - Output.TexCoord3 = TexCoord + Coord3Offset * InvTexSize * DefocusVal; - Output.TexCoord4 = TexCoord + Coord4Offset * InvTexSize * DefocusVal; - Output.TexCoord5 = TexCoord + Coord5Offset * InvTexSize * DefocusVal; - Output.TexCoord6 = TexCoord + Coord6Offset * InvTexSize * DefocusVal; - Output.TexCoord7 = TexCoord + Coord7Offset * InvTexSize * DefocusVal; + Output.TexCoord0 = TexCoord + Coord0Offset * InvTexSize * Defocus; + Output.TexCoord1 = TexCoord + Coord1Offset * InvTexSize * Defocus; + Output.TexCoord2 = TexCoord + Coord2Offset * InvTexSize * Defocus; + Output.TexCoord3 = TexCoord + Coord3Offset * InvTexSize * Defocus; + Output.TexCoord4 = TexCoord + Coord4Offset * InvTexSize * Defocus; + Output.TexCoord5 = TexCoord + Coord5Offset * InvTexSize * Defocus; + Output.TexCoord6 = TexCoord + Coord6Offset * InvTexSize * Defocus; + Output.TexCoord7 = TexCoord + Coord7Offset * InvTexSize * Defocus; return Output; } diff --git a/hlsl/post.fx b/hlsl/post.fx index eee6aaa4798..94c039219e6 100644 --- a/hlsl/post.fx +++ b/hlsl/post.fx @@ -112,16 +112,8 @@ uniform float ShadowV = 0.375f; uniform float ShadowWidth = 8.0f; uniform float ShadowHeight = 8.0f; -uniform float RedFloor = 0.0f; -uniform float GrnFloor = 0.0f; -uniform float BluFloor = 0.0f; - -uniform float SnapX = 0.0f; -uniform float SnapY = 0.0f; - -uniform float RedPower = 2.2f; -uniform float GrnPower = 2.2f; -uniform float BluPower = 2.2f; +uniform float3 Power = float3(1.0f, 1.0f, 1.0f); +uniform float3 Floor = float3(0.0f, 0.0f, 0.0f); float4 ps_main(PS_INPUT Input) : COLOR { @@ -173,7 +165,7 @@ float4 ps_main(PS_INPUT Input) : COLOR float3 Scanned = BaseTexel.rgb * ScanBrightness; // -- Color Compression (increasing the floor of the signal without affecting the ceiling) -- - Scanned = float3(RedFloor + (1.0f - RedFloor) * Scanned.r, GrnFloor + (1.0f - GrnFloor) * Scanned.g, BluFloor + (1.0f - BluFloor) * Scanned.b); + Scanned = Floor + (1.0f - Floor) * Scanned; float2 ShadowDims = float2(ShadowWidth, ShadowHeight); float2 ShadowUV = float2(ShadowU, ShadowV); @@ -185,9 +177,9 @@ float4 ps_main(PS_INPUT Input) : COLOR // -- Final Pixel -- float4 Output = float4(Scanned * lerp(1.0f, ShadowTexel, ShadowBrightness), BaseTexel.a) * Input.Color; - Output.r = pow(Output.r, RedPower); - Output.g = pow(Output.g, GrnPower); - Output.b = pow(Output.b, BluPower); + Output.r = pow(Output.r, Power.r); + Output.g = pow(Output.g, Power.g); + Output.b = pow(Output.b, Power.b); return Output; } |