1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
|
texture RenderedScene;
sampler PostProcess = sampler_state{ texture = <RenderedScene> ; }; // Der Textursampler
float texelSize = 1.0f / 128.0f;
float PixelKernel[13] =
{
-6,
-5,
-4,
-3,
-2,
-1,
0,
1,
2,
3,
4,
5,
6,
};
static const float BlurWeights[13] =
{
0.002216,
0.008764,
0.026995,
0.064759,
0.120985,
0.176033,
0.199471,
0.176033,
0.120985,
0.064759,
0.026995,
0.008764,
0.002216,
};
struct VS_OUTPUT
{
float4 Pos : POSITION;
float2 TexCoord : TEXCOORD0;
};
//*****************************************************
// Vertexshader
VS_OUTPUT vs_main(in float4 pos : POSITION,
in float2 texCoord : TEXCOORD0)
{
VS_OUTPUT Out;
Out.Pos = pos;
Out.TexCoord = texCoord;
return Out;
}
//*****************************************************
// Horizontal
float4 ps_mainH(VS_OUTPUT input) : SV_Target
{
float4 color = 0.0f;
float2 samp = input.TexCoord;
samp.y = input.TexCoord.y;
for (int i = 0; i < 13; i++)
{
samp.x = input.TexCoord.x + PixelKernel[i] * texelSize;
samp.x = saturate(samp.x);
color += tex2D(PostProcess, samp.xy) * BlurWeights[i];
}
return color;
}
//*****************************************************
// Vertical
float4 ps_mainV(VS_OUTPUT input) : SV_Target
{
float4 color = 0.0f;
float2 samp = input.TexCoord;
samp.x = input.TexCoord.x;
for (int i = 0; i < 13; i++)
{
samp.y = input.TexCoord.y + PixelKernel[i] * texelSize;
samp.y = saturate(samp.y);
color += tex2D(PostProcess, samp.xy) * BlurWeights[i];
}
return color;
}
//*****************************************************
// Nothing
VS_OUTPUT vs_tex(in float4 pos : POSITION,
in float2 texCoord : TEXCOORD0)
{
VS_OUTPUT Out;
Out.Pos = pos;
Out.TexCoord = texCoord;
return Out;
}
float4 ps_tex(VS_OUTPUT input) : SV_Target
{
return tex2D(PostProcess, input.TexCoord);
}
//Technique Calls
technique blurH
{
pass p0
{
VertexShader = compile vs_3_0 vs_main();
PixelShader = compile ps_3_0 ps_mainH();
}
}
technique blurV
{
pass p0
{
VertexShader = compile vs_3_0 vs_main();
PixelShader = compile ps_3_0 ps_mainV();
}
}
technique tex
{
pass p0
{
VertexShader = compile vs_3_0 vs_tex();
PixelShader = compile ps_3_0 ps_tex();
}
}
|