summaryrefslogtreecommitdiffstatshomepage
path: root/hlsl/downsample.fx
diff options
context:
space:
mode:
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();
}
}