summaryrefslogtreecommitdiffstatshomepage
path: root/hlsl/downsample.fx
diff options
context:
space:
mode:
author ImJezze <jezze@gmx.net>2015-05-03 14:41:05 +0200
committer ImJezze <jezze@gmx.net>2015-05-03 14:41:05 +0200
commita70198a5fb532f1b5826bcc0a318c1d68291c0c4 (patch)
treeab035722cba9050061facc24ed893872ea4a5abf /hlsl/downsample.fx
parentcc3b682e52bf097d31db78032aad01d6a0b12e94 (diff)
HLSL shader improvements
- changed shadow mask implementation, shadow count XY now represent the number of pixel the shadow UV sized tiles will take on the screen - implemented rotation of the shadow mask texture depending on the default landscape or portrait view of the screen - removed prescale and pixel border of the shadow mask texture - added option to change the shadow UV offset, to reduce the color bleeding of the shadow mask - adjusted presets to work with the changed mask implementation - reduced defocus offset - improved downsampling for better blurring - improved alignment of bloom layers (raster and vector) - applied bloom effect to the render output of screenshot and AVI recording - changed curvature effect to fit screen size - changed scanlines to be not rendered into bloom layers - changed shadow mask to be not rendered into bloom layers - changed color floor to not light the bloom layers - changed shadow mask to not dark the color floor - added image vignetting simulation and option - added round screen corner simulation and option - added screen light reflection simulation and option - made usage of unused brightness offset (additive) - removed unused pincushion option - removed duplicate shadow count Y options - removed artwork/adapture.png - added artwork/adapture-grill.png - added artwork/shadow-mask.png - added artwork/slot-mask.png - added hlsl/simple.fx - removed unused shaders::blit() function - added shaders::screen_pass() function, which handles the (raster-)rendering on screen, into screenshot and AVI recording - added effect:set_bool() function
Diffstat (limited to 'hlsl/downsample.fx')
-rw-r--r--hlsl/downsample.fx47
1 files changed, 34 insertions, 13 deletions
diff --git a/hlsl/downsample.fx b/hlsl/downsample.fx
index 8d073e4cdb0..cabe6b0bcde 100644
--- a/hlsl/downsample.fx
+++ b/hlsl/downsample.fx
@@ -6,7 +6,7 @@ texture DiffuseTexture;
sampler DiffuseSampler = sampler_state
{
- Texture = <DiffuseTexture>;
+ Texture = <DiffuseTexture>;
MipFilter = LINEAR;
MinFilter = LINEAR;
MagFilter = LINEAR;
@@ -32,7 +32,6 @@ struct VS_INPUT
float3 Position : POSITION;
float4 Color : COLOR0;
float2 TexCoord : TEXCOORD0;
- float2 Unused : TEXCOORD1;
};
struct PS_INPUT
@@ -46,26 +45,46 @@ struct PS_INPUT
// Downsample Vertex Shader
//-----------------------------------------------------------------------------
-uniform float2 ScreenSize;
+uniform float2 ScreenDims;
uniform float2 TargetSize;
+
+uniform float2 Prescale = float2(8.0f, 8.0f);
+
uniform float BloomRescale;
+uniform bool PrepareVector = false;
+
VS_OUTPUT vs_main(VS_INPUT Input)
{
VS_OUTPUT Output = (VS_OUTPUT)0;
-
+
+ float2 TargetTexelSize = 1.0f / TargetSize;
+
Output.Position = float4(Input.Position.xyz, 1.0f);
- Output.Position.xy /= ScreenSize;
+ Output.Position.xy /= ScreenDims;
Output.Position.y = 1.0f - Output.Position.y;
Output.Position.xy -= 0.5f;
Output.Position.xy *= 2.0f;
+
Output.Color = Input.Color;
- float2 InvTargetSize = 1.0f / TargetSize;
- float2 TexCoord = Input.Position.xy / ScreenSize;
- Output.TexCoord01.xy = TexCoord + float2(0.5f, 0.5f) * InvTargetSize;
- Output.TexCoord01.zw = TexCoord + float2(1.5f, 0.5f) * InvTargetSize;
- Output.TexCoord23.xy = TexCoord + float2(0.5f, 1.5f) * InvTargetSize;
- Output.TexCoord23.zw = TexCoord + float2(1.5f, 1.5f) * InvTargetSize;
+
+ float2 TexCoord = Input.Position.xy / ScreenDims;
+
+ // Vector graphics is not prescaled it has the size of the screen
+ if (PrepareVector)
+ {
+ Output.TexCoord01.xy = TexCoord + float2(-0.5f, -0.5f) * TargetTexelSize;
+ Output.TexCoord01.zw = TexCoord + float2( 0.5f, -0.5f) * TargetTexelSize;
+ Output.TexCoord23.xy = TexCoord + float2(-0.5f, 0.5f) * TargetTexelSize;
+ Output.TexCoord23.zw = TexCoord + float2( 0.5f, 0.5f) * TargetTexelSize;
+ }
+ else
+ {
+ Output.TexCoord01.xy = TexCoord + float2(-0.5f, -0.5f) * TargetTexelSize * Prescale;
+ Output.TexCoord01.zw = TexCoord + float2( 0.5f, -0.5f) * TargetTexelSize * Prescale;
+ Output.TexCoord23.xy = TexCoord + float2(-0.5f, 0.5f) * TargetTexelSize * Prescale;
+ Output.TexCoord23.zw = TexCoord + float2( 0.5f, 0.5f) * TargetTexelSize * Prescale;
+ }
return Output;
}
@@ -80,7 +99,9 @@ float4 ps_main(PS_INPUT Input) : COLOR
float4 texel1 = tex2D(DiffuseSampler, Input.TexCoord01.zw);
float4 texel2 = tex2D(DiffuseSampler, Input.TexCoord23.xy);
float4 texel3 = tex2D(DiffuseSampler, Input.TexCoord23.zw);
- float4 outTexel = (texel0 + texel1 + texel2 + texel3) * BloomRescale;
+
+ float4 outTexel = (texel0 + texel1 + texel2 + texel3) / 4.0 * BloomRescale;
+
return float4(outTexel.rgb, 1.0f);
}
@@ -97,6 +118,6 @@ technique TestTechnique
Sampler[0] = <DiffuseSampler>;
VertexShader = compile vs_2_0 vs_main();
- PixelShader = compile ps_2_0 ps_main();
+ PixelShader = compile ps_2_0 ps_main();
}
}