summaryrefslogtreecommitdiffstatshomepage
path: root/hlsl
diff options
context:
space:
mode:
author Scott Stone <tafoid@users.noreply.github.com>2014-01-24 00:30:29 +0000
committer Scott Stone <tafoid@users.noreply.github.com>2014-01-24 00:30:29 +0000
commitaa896515a041551e9025db1f8d71183d81a5de94 (patch)
tree7fb78379f0dd38aa4f26f44be53b9147aa6e4022 /hlsl
parent738e0aeedda637080678510ca262bed2dbae2b41 (diff)
This revert (r26927), as requested by author, fixes the regression of missing graphics for vector games using HLSL. Also reverted patch in code (r27063) to deal with "roundf" for pre-vs2013 compilers - which is no longer needed. (nw)
Diffstat (limited to 'hlsl')
-rw-r--r--hlsl/bloom.fx289
-rw-r--r--hlsl/post.fx208
2 files changed, 248 insertions, 249 deletions
diff --git a/hlsl/bloom.fx b/hlsl/bloom.fx
index 4508459e211..cec6aa3aab7 100644
--- a/hlsl/bloom.fx
+++ b/hlsl/bloom.fx
@@ -16,123 +16,123 @@ texture DiffuseK;
sampler DiffuseSampler0 = sampler_state
{
- Texture = <DiffuseA>;
- MipFilter = NONE;
- MinFilter = NONE;
- MagFilter = NONE;
- AddressU = CLAMP;
- AddressV = CLAMP;
- AddressW = CLAMP;
+ Texture = <DiffuseA>;
+ MipFilter = LINEAR;
+ MinFilter = LINEAR;
+ MagFilter = LINEAR;
+ AddressU = CLAMP;
+ AddressV = CLAMP;
+ AddressW = CLAMP;
};
sampler DiffuseSampler1 = sampler_state
{
- Texture = <DiffuseB>;
- MipFilter = LINEAR;
- MinFilter = LINEAR;
- MagFilter = LINEAR;
- AddressU = CLAMP;
- AddressV = CLAMP;
- AddressW = CLAMP;
+ Texture = <DiffuseB>;
+ MipFilter = LINEAR;
+ MinFilter = LINEAR;
+ MagFilter = LINEAR;
+ AddressU = CLAMP;
+ AddressV = CLAMP;
+ AddressW = CLAMP;
};
sampler DiffuseSampler2 = sampler_state
{
- Texture = <DiffuseC>;
- MipFilter = LINEAR;
- MinFilter = LINEAR;
- MagFilter = LINEAR;
- AddressU = CLAMP;
- AddressV = CLAMP;
- AddressW = CLAMP;
+ Texture = <DiffuseC>;
+ MipFilter = LINEAR;
+ MinFilter = LINEAR;
+ MagFilter = LINEAR;
+ AddressU = CLAMP;
+ AddressV = CLAMP;
+ AddressW = CLAMP;
};
sampler DiffuseSampler3 = sampler_state
{
- Texture = <DiffuseD>;
- MipFilter = LINEAR;
- MinFilter = LINEAR;
- MagFilter = LINEAR;
- AddressU = CLAMP;
- AddressV = CLAMP;
- AddressW = CLAMP;
+ Texture = <DiffuseD>;
+ MipFilter = LINEAR;
+ MinFilter = LINEAR;
+ MagFilter = LINEAR;
+ AddressU = CLAMP;
+ AddressV = CLAMP;
+ AddressW = CLAMP;
};
sampler DiffuseSampler4 = sampler_state
{
- Texture = <DiffuseE>;
- MipFilter = LINEAR;
- MinFilter = LINEAR;
- MagFilter = LINEAR;
- AddressU = CLAMP;
- AddressV = CLAMP;
- AddressW = CLAMP;
+ Texture = <DiffuseE>;
+ MipFilter = LINEAR;
+ MinFilter = LINEAR;
+ MagFilter = LINEAR;
+ AddressU = CLAMP;
+ AddressV = CLAMP;
+ AddressW = CLAMP;
};
sampler DiffuseSampler5 = sampler_state
{
- Texture = <DiffuseF>;
- MipFilter = LINEAR;
- MinFilter = LINEAR;
- MagFilter = LINEAR;
- AddressU = CLAMP;
- AddressV = CLAMP;
- AddressW = CLAMP;
+ Texture = <DiffuseF>;
+ MipFilter = LINEAR;
+ MinFilter = LINEAR;
+ MagFilter = LINEAR;
+ AddressU = CLAMP;
+ AddressV = CLAMP;
+ AddressW = CLAMP;
};
sampler DiffuseSampler6 = sampler_state
{
- Texture = <DiffuseG>;
- MipFilter = LINEAR;
- MinFilter = LINEAR;
- MagFilter = LINEAR;
- AddressU = CLAMP;
- AddressV = CLAMP;
- AddressW = CLAMP;
+ Texture = <DiffuseG>;
+ MipFilter = LINEAR;
+ MinFilter = LINEAR;
+ MagFilter = LINEAR;
+ AddressU = CLAMP;
+ AddressV = CLAMP;
+ AddressW = CLAMP;
};
sampler DiffuseSampler7 = sampler_state
{
- Texture = <DiffuseH>;
- MipFilter = LINEAR;
- MinFilter = LINEAR;
- MagFilter = LINEAR;
- AddressU = CLAMP;
- AddressV = CLAMP;
- AddressW = CLAMP;
+ Texture = <DiffuseH>;
+ MipFilter = LINEAR;
+ MinFilter = LINEAR;
+ MagFilter = LINEAR;
+ AddressU = CLAMP;
+ AddressV = CLAMP;
+ AddressW = CLAMP;
};
sampler DiffuseSampler8 = sampler_state
{
- Texture = <DiffuseI>;
- MipFilter = LINEAR;
- MinFilter = LINEAR;
- MagFilter = LINEAR;
- AddressU = CLAMP;
- AddressV = CLAMP;
- AddressW = CLAMP;
+ Texture = <DiffuseI>;
+ MipFilter = LINEAR;
+ MinFilter = LINEAR;
+ MagFilter = LINEAR;
+ AddressU = CLAMP;
+ AddressV = CLAMP;
+ AddressW = CLAMP;
};
sampler DiffuseSampler9 = sampler_state
{
- Texture = <DiffuseJ>;
- MipFilter = LINEAR;
- MinFilter = LINEAR;
- MagFilter = LINEAR;
- AddressU = CLAMP;
- AddressV = CLAMP;
- AddressW = CLAMP;
+ Texture = <DiffuseJ>;
+ MipFilter = LINEAR;
+ MinFilter = LINEAR;
+ MagFilter = LINEAR;
+ AddressU = CLAMP;
+ AddressV = CLAMP;
+ AddressW = CLAMP;
};
sampler DiffuseSamplerA = sampler_state
{
- Texture = <DiffuseK>;
- MipFilter = LINEAR;
- MinFilter = LINEAR;
- MagFilter = LINEAR;
- AddressU = CLAMP;
- AddressV = CLAMP;
- AddressW = CLAMP;
+ Texture = <DiffuseK>;
+ MipFilter = LINEAR;
+ MinFilter = LINEAR;
+ MagFilter = LINEAR;
+ AddressU = CLAMP;
+ AddressV = CLAMP;
+ AddressW = CLAMP;
};
//-----------------------------------------------------------------------------
@@ -141,45 +141,44 @@ sampler DiffuseSamplerA = sampler_state
struct VS_OUTPUT
{
- float4 Position : POSITION;
- float4 Color : COLOR0;
- float2 TexCoord : TEXCOORD0;
+ float4 Position : POSITION;
+ float4 Color : COLOR0;
+ float2 TexCoord : TEXCOORD0;
};
struct VS_INPUT
{
- float3 Position : POSITION;
- float4 Color : COLOR0;
- float2 TexCoord : TEXCOORD0;
- float2 Unused : TEXCOORD1;
+ float3 Position : POSITION;
+ float4 Color : COLOR0;
+ float2 TexCoord : TEXCOORD0;
+ float2 Unused : TEXCOORD1;
};
struct PS_INPUT
{
- float4 Color : COLOR0;
- float2 TexCoord : TEXCOORD0;
+ float4 Color : COLOR0;
+ float2 TexCoord : TEXCOORD0;
};
//-----------------------------------------------------------------------------
// Bloom Vertex Shader
//-----------------------------------------------------------------------------
-uniform float2 ScreenSize;
-uniform float2 TextureSize;
+uniform float2 TargetSize;
VS_OUTPUT vs_main(VS_INPUT Input)
{
- VS_OUTPUT Output = (VS_OUTPUT)0;
-
- Output.Position = float4(Input.Position.xyz, 1.0f);
- Output.Position.xy /= ScreenSize;
- Output.Position.y = 1.0f - Output.Position.y;
- Output.Position.xy -= float2(0.5f, 0.5f);
- Output.Position.xy *= float2(2.0f, 2.0f);
- Output.Color = Input.Color;
- Output.TexCoord = (Input.Position.xy + 0.5f) / ScreenSize;
-
- return Output;
+ VS_OUTPUT Output = (VS_OUTPUT)0;
+
+ Output.Position = float4(Input.Position.xyz, 1.0f);
+ Output.Position.xy /= TargetSize;
+ Output.Position.y = 1.0f - Output.Position.y;
+ Output.Position.xy -= float2(0.5f, 0.5f);
+ Output.Position.xy *= float2(2.0f, 2.0f);
+ Output.Color = Input.Color;
+ Output.TexCoord = (Input.Position.xy + 0.5f) / TargetSize;
+
+ return Output;
}
//-----------------------------------------------------------------------------
@@ -192,33 +191,33 @@ uniform float3 Level89AWeight;
float4 ps_main(PS_INPUT Input) : COLOR
{
- float3 texel0 = tex2D(DiffuseSampler0, Input.TexCoord).rgb;
- float3 texel1 = tex2D(DiffuseSampler1, Input.TexCoord).rgb;
- float3 texel2 = tex2D(DiffuseSampler2, Input.TexCoord).rgb;
- float3 texel3 = tex2D(DiffuseSampler3, Input.TexCoord).rgb;
- float3 texel4 = tex2D(DiffuseSampler4, Input.TexCoord).rgb;
- float3 texel5 = tex2D(DiffuseSampler5, Input.TexCoord).rgb;
- float3 texel6 = tex2D(DiffuseSampler6, Input.TexCoord).rgb;
- float3 texel7 = tex2D(DiffuseSampler7, Input.TexCoord).rgb;
- float3 texel8 = tex2D(DiffuseSampler8, Input.TexCoord).rgb;
- float3 texel9 = tex2D(DiffuseSampler9, Input.TexCoord).rgb;
- float3 texelA = tex2D(DiffuseSamplerA, Input.TexCoord).rgb;
-
- texel0 = texel0 * Level0123Weight.x;
- texel1 = texel1 * Level0123Weight.y;
- texel2 = texel2 * Level0123Weight.z;
- texel3 = texel3 * Level0123Weight.w;
- texel4 = texel4 * Level4567Weight.x;
- texel5 = texel5 * Level4567Weight.y;
- texel6 = texel6 * Level4567Weight.z;
- texel7 = texel7 * Level4567Weight.w;
- texel8 = texel8 * Level89AWeight.x;
- texel9 = texel9 * Level89AWeight.y;
- texelA = texelA * Level89AWeight.z;
-
- float4 sum = float4(texel0 + texel1 + texel2 + texel3 + texel4 +
- texel5 + texel6 + texel7 + texel8 + texel9 + texelA, 1.0f);
- return sum;
+ float3 texel0 = tex2D(DiffuseSampler0, Input.TexCoord).rgb;
+ float3 texel1 = tex2D(DiffuseSampler1, Input.TexCoord).rgb;
+ float3 texel2 = tex2D(DiffuseSampler2, Input.TexCoord).rgb;
+ float3 texel3 = tex2D(DiffuseSampler3, Input.TexCoord).rgb;
+ float3 texel4 = tex2D(DiffuseSampler4, Input.TexCoord).rgb;
+ float3 texel5 = tex2D(DiffuseSampler5, Input.TexCoord).rgb;
+ float3 texel6 = tex2D(DiffuseSampler6, Input.TexCoord).rgb;
+ float3 texel7 = tex2D(DiffuseSampler7, Input.TexCoord).rgb;
+ float3 texel8 = tex2D(DiffuseSampler8, Input.TexCoord).rgb;
+ float3 texel9 = tex2D(DiffuseSampler9, Input.TexCoord).rgb;
+ float3 texelA = tex2D(DiffuseSamplerA, Input.TexCoord).rgb;
+
+ texel0 = texel0 * Level0123Weight.x;
+ texel1 = texel1 * Level0123Weight.y;
+ texel2 = texel2 * Level0123Weight.z;
+ texel3 = texel3 * Level0123Weight.w;
+ texel4 = texel4 * Level4567Weight.x;
+ texel5 = texel5 * Level4567Weight.y;
+ texel6 = texel6 * Level4567Weight.z;
+ texel7 = texel7 * Level4567Weight.w;
+ texel8 = texel8 * Level89AWeight.x;
+ texel9 = texel9 * Level89AWeight.y;
+ texelA = texelA * Level89AWeight.z;
+
+ float4 sum = float4(texel0 + texel1 + texel2 + texel3 + texel4 +
+ texel5 + texel6 + texel7 + texel8 + texel9 + texelA, 1.0f);
+ return sum;
}
//-----------------------------------------------------------------------------
@@ -227,23 +226,23 @@ float4 ps_main(PS_INPUT Input) : COLOR
technique TestTechnique
{
- pass Pass0
- {
- Lighting = FALSE;
-
- Sampler[0] = <DiffuseSampler0>; // 2048x2048
- Sampler[1] = <DiffuseSampler1>; // 1024x1024
- Sampler[2] = <DiffuseSampler2>; // 512x512
- Sampler[3] = <DiffuseSampler3>; // 256x256
- Sampler[4] = <DiffuseSampler4>; // 128x128
- Sampler[5] = <DiffuseSampler5>; // 64x64
- Sampler[6] = <DiffuseSampler6>; // 32x32
- Sampler[7] = <DiffuseSampler7>; // 16x16
- Sampler[8] = <DiffuseSampler8>; // 8x8
- Sampler[9] = <DiffuseSampler9>; // 4x4
- Sampler[10] = <DiffuseSamplerA>; // 2x2
-
- VertexShader = compile vs_3_0 vs_main();
- PixelShader = compile ps_3_0 ps_main();
- }
+ pass Pass0
+ {
+ Lighting = FALSE;
+
+ Sampler[0] = <DiffuseSampler0>; // 2048x2048
+ Sampler[1] = <DiffuseSampler1>; // 1024x1024
+ Sampler[2] = <DiffuseSampler2>; // 512x512
+ Sampler[3] = <DiffuseSampler3>; // 256x256
+ Sampler[4] = <DiffuseSampler4>; // 128x128
+ Sampler[5] = <DiffuseSampler5>; // 64x64
+ Sampler[6] = <DiffuseSampler6>; // 32x32
+ Sampler[7] = <DiffuseSampler7>; // 16x16
+ Sampler[8] = <DiffuseSampler8>; // 8x8
+ Sampler[9] = <DiffuseSampler9>; // 4x4
+ Sampler[10] = <DiffuseSamplerA>; // 2x2
+
+ VertexShader = compile vs_3_0 vs_main();
+ PixelShader = compile ps_3_0 ps_main();
+ }
}
diff --git a/hlsl/post.fx b/hlsl/post.fx
index 7a2d47ce885..89a92fd6969 100644
--- a/hlsl/post.fx
+++ b/hlsl/post.fx
@@ -6,26 +6,26 @@ texture DiffuseTexture;
sampler DiffuseSampler = sampler_state
{
- Texture = <DiffuseTexture>;
- MipFilter = LINEAR;
- MinFilter = LINEAR;
- MagFilter = LINEAR;
- AddressU = CLAMP;
- AddressV = CLAMP;
- AddressW = CLAMP;
+ Texture = <DiffuseTexture>;
+ MipFilter = LINEAR;
+ MinFilter = LINEAR;
+ MagFilter = LINEAR;
+ AddressU = CLAMP;
+ AddressV = CLAMP;
+ AddressW = CLAMP;
};
texture ShadowTexture;
sampler ShadowSampler = sampler_state
{
- Texture = <ShadowTexture>;
- MipFilter = LINEAR;
- MinFilter = LINEAR;
- MagFilter = LINEAR;
- AddressU = WRAP;
- AddressV = WRAP;
- AddressW = WRAP;
+ Texture = <ShadowTexture>;
+ MipFilter = LINEAR;
+ MinFilter = LINEAR;
+ MagFilter = LINEAR;
+ AddressU = WRAP;
+ AddressV = WRAP;
+ AddressW = WRAP;
};
//-----------------------------------------------------------------------------
@@ -34,23 +34,23 @@ sampler ShadowSampler = sampler_state
struct VS_OUTPUT
{
- float4 Position : POSITION;
- float4 Color : COLOR0;
- float2 TexCoord : TEXCOORD0;
+ float4 Position : POSITION;
+ float4 Color : COLOR0;
+ float2 TexCoord : TEXCOORD0;
};
struct VS_INPUT
{
- float4 Position : POSITION;
- float4 Color : COLOR0;
- float2 TexCoord : TEXCOORD0;
- float2 Unused : TEXCOORD1;
+ float4 Position : POSITION;
+ float4 Color : COLOR0;
+ float2 TexCoord : TEXCOORD0;
+ float2 Unused : TEXCOORD1;
};
struct PS_INPUT
{
- float4 Color : COLOR0;
- float2 TexCoord : TEXCOORD0;
+ float4 Color : COLOR0;
+ float2 TexCoord : TEXCOORD0;
};
//-----------------------------------------------------------------------------
@@ -63,17 +63,17 @@ uniform float2 SourceRect;
VS_OUTPUT vs_main(VS_INPUT Input)
{
- VS_OUTPUT Output = (VS_OUTPUT)0;
-
- Output.Position = float4(Input.Position.xyz, 1.0f);
- Output.Position.xy /= ScreenDims;
- Output.Position.y = 1.0f - Output.Position.y;
- Output.Position.xy -= 0.5f;
- Output.Position *= float4(2.0f, 2.0f, 1.0f, 1.0f);
- Output.Color = Input.Color;
- Output.TexCoord = Input.TexCoord + 0.5f / SourceDims;
-
- return Output;
+ VS_OUTPUT Output = (VS_OUTPUT)0;
+
+ Output.Position = float4(Input.Position.xyz, 1.0f);
+ Output.Position.xy /= ScreenDims;
+ Output.Position.y = 1.0f - Output.Position.y;
+ Output.Position.xy -= 0.5f;
+ Output.Position *= float4(2.0f, 2.0f, 1.0f, 1.0f);
+ Output.Color = Input.Color;
+ Output.TexCoord = Input.TexCoord + 0.5f / SourceDims;
+
+ return Output;
}
//-----------------------------------------------------------------------------
@@ -102,69 +102,69 @@ uniform float3 Floor = float3(0.0f, 0.0f, 0.0f);
float4 ps_main(PS_INPUT Input) : COLOR
{
- float2 UsedArea = 1.0f / SourceRect;
- float2 HalfRect = SourceRect * 0.5f;
- float2 R2 = 1.0f / pow(length(UsedArea), 2.0f);
- // -- Screen Pincushion Calculation --
- float2 PinUnitCoord = Input.TexCoord * UsedArea * 2.0f - 1.0f;
- float PincushionR2 = pow(length(PinUnitCoord), 2.0f) * R2;
- float2 PincushionCurve = PinUnitCoord * PincushionAmount * PincushionR2;
- float2 BaseCoord = Input.TexCoord;
- float2 ScanCoord = BaseCoord - 0.5f / ScreenDims;
-
- BaseCoord -= HalfRect;
- BaseCoord *= 1.0f - PincushionAmount * UsedArea * 0.2f; // Warning: Magic constant
- BaseCoord += HalfRect;
- BaseCoord += PincushionCurve;
-
- ScanCoord -= HalfRect;
- ScanCoord *= 1.0f - PincushionAmount * UsedArea * 0.2f; // Warning: Magic constant
- ScanCoord += HalfRect;
- ScanCoord += PincushionCurve;
-
- float2 CurveClipUnitCoord = Input.TexCoord * UsedArea * 2.0f - 1.0f;
- float CurvatureClipR2 = pow(length(CurveClipUnitCoord), 2.0f) * R2;
- float2 CurvatureClipCurve = CurveClipUnitCoord * CurvatureAmount * CurvatureClipR2;
- float2 ScreenClipCoord = Input.TexCoord;
- ScreenClipCoord -= HalfRect;
- ScreenClipCoord *= 1.0f - CurvatureAmount * UsedArea * 0.2f; // Warning: Magic constant
- ScreenClipCoord += HalfRect;
- ScreenClipCoord += CurvatureClipCurve;
-
- // RGB Pincushion Calculation
- float3 PincushionCurveX = PinUnitCoord.x * PincushionAmount * PincushionR2;
- float3 PincushionCurveY = PinUnitCoord.y * PincushionAmount * PincushionR2;
-
- float4 BaseTexel = tex2D(DiffuseSampler, BaseCoord);
-
- // -- Alpha Clipping (1px border in drawd3d does not work for some reason) --
- clip((BaseCoord < 1.0f / SourceDims) ? -1 : 1);
- clip((BaseCoord > (SourceRect + 1.0f / SourceDims)) ? -1 : 1);
-
- // -- Scanline Simulation --
- float InnerSine = ScanCoord.y * SourceDims.y * ScanlineScale;
- float ScanBrightMod = sin(InnerSine * PI + ScanlineOffset * SourceDims.y);
- float3 ScanBrightness = lerp(1.0f, (pow(ScanBrightMod * ScanBrightMod, ScanlineHeight) * ScanlineBrightScale + 1.0f) * 0.5f, ScanlineAlpha);
- float3 Scanned = BaseTexel.rgb * ScanBrightness;
-
- // -- Color Compression (increasing the floor of the signal without affecting the ceiling) --
- Scanned = Floor + (1.0f - Floor) * Scanned;
-
- // Shadow mask
- // Note: This is broken right now and needs fixed
- float2 ShadowFrac = frac(BaseCoord * ShadowCount);
- float2 ShadowCoord = ShadowFrac * ShadowUV + 0.5f / ShadowDims;
- float3 ShadowTexel = lerp(1.0f, tex2D(ShadowSampler, ShadowCoord).rgb, ShadowAlpha);
-
- // -- Final Pixel --
- float4 Output = float4(Scanned * ShadowTexel, BaseTexel.a) * Input.Color;
-
- Output.r = pow(Output.r, Power.r);
- Output.g = pow(Output.g, Power.g);
- Output.b = pow(Output.b, Power.b);
- Output.a = 1.0f;
-
- return Output;
+ float2 UsedArea = 1.0f / SourceRect;
+ float2 HalfRect = SourceRect * 0.5f;
+ float2 R2 = 1.0f / pow(length(UsedArea), 2.0f);
+ // -- Screen Pincushion Calculation --
+ float2 PinUnitCoord = Input.TexCoord * UsedArea * 2.0f - 1.0f;
+ float PincushionR2 = pow(length(PinUnitCoord), 2.0f) * R2;
+ float2 PincushionCurve = PinUnitCoord * PincushionAmount * PincushionR2;
+ float2 BaseCoord = Input.TexCoord;
+ float2 ScanCoord = BaseCoord - 0.5f / ScreenDims;
+
+ BaseCoord -= HalfRect;
+ BaseCoord *= 1.0f - PincushionAmount * UsedArea * 0.2f; // Warning: Magic constant
+ BaseCoord += HalfRect;
+ BaseCoord += PincushionCurve;
+
+ ScanCoord -= HalfRect;
+ ScanCoord *= 1.0f - PincushionAmount * UsedArea * 0.2f; // Warning: Magic constant
+ ScanCoord += HalfRect;
+ ScanCoord += PincushionCurve;
+
+ float2 CurveClipUnitCoord = Input.TexCoord * UsedArea * 2.0f - 1.0f;
+ float CurvatureClipR2 = pow(length(CurveClipUnitCoord), 2.0f) * R2;
+ float2 CurvatureClipCurve = CurveClipUnitCoord * CurvatureAmount * CurvatureClipR2;
+ float2 ScreenClipCoord = Input.TexCoord;
+ ScreenClipCoord -= HalfRect;
+ ScreenClipCoord *= 1.0f - CurvatureAmount * UsedArea * 0.2f; // Warning: Magic constant
+ ScreenClipCoord += HalfRect;
+ ScreenClipCoord += CurvatureClipCurve;
+
+ // RGB Pincushion Calculation
+ float3 PincushionCurveX = PinUnitCoord.x * PincushionAmount * PincushionR2;
+ float3 PincushionCurveY = PinUnitCoord.y * PincushionAmount * PincushionR2;
+
+ float4 BaseTexel = tex2D(DiffuseSampler, BaseCoord);
+
+ // -- Alpha Clipping (1px border in drawd3d does not work for some reason) --
+ clip((BaseCoord < 1.0f / SourceDims) ? -1 : 1);
+ clip((BaseCoord > (SourceRect + 1.0f / SourceDims)) ? -1 : 1);
+
+ // -- Scanline Simulation --
+ float InnerSine = ScanCoord.y * SourceDims.y * ScanlineScale;
+ float ScanBrightMod = sin(InnerSine * PI + ScanlineOffset * SourceDims.y);
+ float3 ScanBrightness = lerp(1.0f, (pow(ScanBrightMod * ScanBrightMod, ScanlineHeight) * ScanlineBrightScale + 1.0f) * 0.5f, ScanlineAlpha);
+ float3 Scanned = BaseTexel.rgb * ScanBrightness;
+
+ // -- Color Compression (increasing the floor of the signal without affecting the ceiling) --
+ Scanned = Floor + (1.0f - Floor) * Scanned;
+
+ // Shadow mask
+ // Note: This is broken right now and needs fixed
+ float2 ShadowFrac = frac(BaseCoord * ShadowCount);
+ float2 ShadowCoord = ShadowFrac * ShadowUV + 0.5f / ShadowDims;
+ float3 ShadowTexel = lerp(1.0f, tex2D(ShadowSampler, ShadowCoord).rgb, ShadowAlpha);
+
+ // -- Final Pixel --
+ float4 Output = float4(Scanned * ShadowTexel, BaseTexel.a) * Input.Color;
+
+ Output.r = pow(Output.r, Power.r);
+ Output.g = pow(Output.g, Power.g);
+ Output.b = pow(Output.b, Power.b);
+ Output.a = 1.0f;
+
+ return Output;
}
//-----------------------------------------------------------------------------
@@ -173,13 +173,13 @@ float4 ps_main(PS_INPUT Input) : COLOR
technique ScanMaskTechnique
{
- pass Pass0
- {
- Lighting = FALSE;
+ pass Pass0
+ {
+ Lighting = FALSE;
- //Sampler[0] = <DiffuseSampler>;
+ //Sampler[0] = <DiffuseSampler>;
- VertexShader = compile vs_3_0 vs_main();
- PixelShader = compile ps_3_0 ps_main();
- }
+ VertexShader = compile vs_3_0 vs_main();
+ PixelShader = compile ps_3_0 ps_main();
+ }
}