60 lines
1.7 KiB
Plaintext
60 lines
1.7 KiB
Plaintext
float4 res : register(c0);
|
|
float4 glow : register(c61);
|
|
|
|
sampler2D colorSampler : register(s0);
|
|
sampler2D guideSampler : register(s4);
|
|
|
|
static float2 fGaussianWeights[] = {
|
|
float2(-3.0f, 0.015625f),
|
|
float2(-2.0f, 0.09375f),
|
|
float2(-1.0f, 0.234375f),
|
|
float2(0.0f, 0.3125f),
|
|
float2(1.0f, 0.234375f),
|
|
float2(2.0f, 0.09375f),
|
|
float2(3.0f, 0.015625f)
|
|
};
|
|
|
|
float4 ps_blur(float2 t : TEXCOORD0, uniform float2 vDir) : COLOR0
|
|
{
|
|
float2 vDelta = vDir * res.zw;
|
|
float4 fColor = 0.f;
|
|
|
|
for(int i = 0; i < 7; i++)
|
|
fColor += fGaussianWeights[i].y
|
|
* tex2D(colorSampler, t + fGaussianWeights[i].x * vDelta);
|
|
|
|
return fColor;
|
|
}
|
|
float4 ps_blur_hor(float2 t : TEXCOORD0) : COLOR0 { return ps_blur(t, float2(1.f, 0.f)); }
|
|
float4 ps_blur_ver(float2 t : TEXCOORD0) : COLOR0 { return ps_blur(t, float2(0.f, 1.f)); }
|
|
|
|
float4 ps_blur_bil(float2 t : TEXCOORD0, uniform float2 vDir) : COLOR0
|
|
{
|
|
float2 vDelta = vDir * res.zw;
|
|
float4 fGuide = tex2D(guideSampler, t);
|
|
|
|
float4 fColor = 0.f;
|
|
float fWeight = 0.f;
|
|
|
|
for(int i = 0; i < 7; i++)
|
|
{
|
|
float2 to = t + vDelta * fGaussianWeights[i].x;
|
|
float4 fSample = tex2D(colorSampler, to);
|
|
float fSampleWeight = (1.f - saturate(4.f * (fGuide.w - fSample.w))) * fGaussianWeights[i].y;
|
|
fColor += fSample * fSampleWeight;
|
|
fWeight += fSampleWeight;
|
|
}
|
|
|
|
return lerp(fGuide, fColor / fWeight, fWeight);
|
|
}
|
|
float4 ps_blur_bil_hor(float2 t : TEXCOORD0) : COLOR0 { return ps_blur_bil(t, float2(1.f, 0.f)); }
|
|
float4 ps_blur_bil_ver(float2 t : TEXCOORD0) : COLOR0 { return ps_blur_bil(t, float2(0.f, 1.f)); }
|
|
|
|
float4 ps_extract_inv_alpha(float2 t : TEXCOORD0) : COLOR0
|
|
{
|
|
float4 c = tex2D(colorSampler, t);
|
|
c.a = 2.f - 2.0f * c.a;
|
|
c.xyz *= c.a;
|
|
return c;
|
|
}
|