#include "depthpass.glsllib"
uniform vec2 CameraClipRange;
void frag()
{
vec4 depthSample = texture(DepthSampler, TexCoord);
float depthVal = getDepthValue( depthSample, CameraClipRange );
float rawDepth = depthValueToLinearDistance( depthVal, CameraClipRange );
float depthScale = abs(CameraClipRange.y - CameraClipRange.x);
float depthDisp = abs(rawDepth - FocusDepth) / depthScale;
float finalDisperse = Dispersion * depthDisp;
float effectAmt = texture(MaskSampler, TexCoord).x;
if ( DepthDebug )
{
gl_FragColor.rgb = vec3( depthDisp * effectAmt );
return;
}
gl_FragColor = texture(SourceSampler, TexCoord);
ivec2 texSize = textureSize( SourceSampler, 0 );
vec2 dispDir = normalize( TexCoord.xy - vec2(0.5) );
dispDir /= 2.0 * vec2( texSize );
vec3 mixColor;
mixColor = gl_FragColor.rgb;
mixColor.r = texture(SourceSampler, TexCoord+dispDir*finalDisperse).r;
mixColor.b = texture(SourceSampler, TexCoord-dispDir*finalDisperse).b;
gl_FragColor.rgb = mix( gl_FragColor.rgb, mixColor, effectAmt );
}