blob: 6c9bf82bf81ce475d57b6d7a290a70d1449a2471 [file] [log] [blame]
#include "blur.glsllib"
float AdvancedGetTiltShiftMultiplier(vec2 inTexCoord, float inFocusBarHeight, float inFocusWidth,
bool inVertical, bool inInvert)
{
float texPos = inVertical ? inTexCoord.x : inTexCoord.y;
float focusDiff = max(0.0, abs(texPos - inFocusBarHeight) - (inFocusWidth / 2.0))
/ inFocusWidth;
float retval = clamp(focusDiff, 0.0, 1.0);
return inInvert ? 1.0 - retval : retval;
}
vec4 AdvancedPoissonTiltShiftBlur(sampler2D inSampler, float inAlphaFlag, float inBarHeight,
float inFocusWidth, bool inVertical, bool inInvert)
{
float mult0 = (1.0 - poisson0.z) * AdvancedGetTiltShiftMultiplier(TexCoord0, inBarHeight,
inFocusWidth, inVertical,
inInvert);
float mult1 = (1.0 - poisson1.z) * AdvancedGetTiltShiftMultiplier(TexCoord1, inBarHeight,
inFocusWidth, inVertical,
inInvert);
float mult2 = (1.0 - poisson2.z) * AdvancedGetTiltShiftMultiplier(TexCoord2, inBarHeight,
inFocusWidth, inVertical,
inInvert);
float mult3 = (1.0 - poisson3.z) * AdvancedGetTiltShiftMultiplier(TexCoord3, inBarHeight,
inFocusWidth, inVertical,
inInvert);
float mult4 = (1.0 - poisson4.z) * AdvancedGetTiltShiftMultiplier(TexCoord4, inBarHeight,
inFocusWidth, inVertical,
inInvert);
float multTotal = mult0 + mult1 + mult2 + mult3 + mult4;
float multMultiplier = multTotal > 0.0 ? 1.0 / multTotal : 0.0;
vec4 outColor = GetTextureValuePreMult(inSampler, TexCoord0) * (mult0 * multMultiplier);
outColor += GetTextureValuePreMult(inSampler, TexCoord1) * (mult1 * multMultiplier);
outColor += GetTextureValuePreMult(inSampler, TexCoord2) * (mult2 * multMultiplier);
outColor += GetTextureValuePreMult(inSampler, TexCoord3) * (mult3 * multMultiplier);
outColor += GetTextureValuePreMult(inSampler, TexCoord4) * (mult4 * multMultiplier);
return outColor;
}
void frag()
{
float centerMultiplier = AdvancedGetTiltShiftMultiplier(TexCoord, focusPosition, focusWidth,
isVertical, isInverted);
vec4 blurColor = AdvancedPoissonTiltShiftBlur(Texture0, Texture0Info.z, focusPosition,
focusWidth, isVertical, isInverted);
gl_FragColor = mix(texture2D_sourceSampler(TexCoord), blurColor, centerMultiplier);
}