Revision control

Copy as Markdown

VARYING vec2 TexCoord0;
VARYING vec2 TexCoord1;
VARYING vec2 TexCoord2;
VARYING vec2 TexCoord3;
float advancedGetTiltShiftMultiplier(vec2 inTexCoord, float inFocusBarHeight, float inFocusWidth,
bool inVertical, bool inInvert)
{
float texPos = inVertical ? inTexCoord.x : 0.5 + (inTexCoord.y - 0.5) * (-FRAMEBUFFER_Y_UP);
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 advancedBoxTiltShiftBlur(sampler2D inBlurSampler,
float inFocusBarHeight, float inFocusWidth,
bool inVertical, bool inInvert)
{
float mult0 = .25 * advancedGetTiltShiftMultiplier(TexCoord0, inFocusBarHeight, inFocusWidth,
inVertical, inInvert);
float mult1 = .25 * advancedGetTiltShiftMultiplier(TexCoord1, inFocusBarHeight, inFocusWidth,
inVertical, inInvert);
float mult2 = .25 * advancedGetTiltShiftMultiplier(TexCoord2, inFocusBarHeight, inFocusWidth,
inVertical, inInvert);
float mult3 = .25 * advancedGetTiltShiftMultiplier(TexCoord3, inFocusBarHeight, inFocusWidth,
inVertical, inInvert);
float multTotal = mult0 + mult1 + mult2 + mult3;
float totalDivisor = multTotal != 0.0 ? 1.0 / multTotal : 0.0;
vec4 outCol = texture(inBlurSampler, TexCoord0) * mult0;
outCol += texture(inBlurSampler, TexCoord1) * mult1;
outCol += texture(inBlurSampler, TexCoord2) * mult2;
outCol += texture(inBlurSampler, TexCoord3) * mult3;
return outCol * totalDivisor;
}
void MAIN()
{
FRAGCOLOR = advancedBoxTiltShiftBlur(INPUT, focusPosition, focusWidth, isVertical, isInverted);
}