#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 ); }