uniform sampler2D uTexSceneDepth; uniform vec3 uInverseRatioDepth; uniform vec3 uInverseRatioMain; uniform int uDepthMode; uniform float uDitherCutoff; float linear_depth( float depth, float near, float far ) { float z = depth * 2.0 - 1.0; return (2.0 * near * far) / (far + near - z * (far - near)); } void depth_compare_dither() { if( uDepthMode == 1 ) { vec2 back_coord = gl_FragCoord.xy * uInverseRatioMain.xy * uInverseRatioDepth.xy; float back_depth = texture( uTexSceneDepth, back_coord ).r; float front_depth = gl_FragCoord.z/gl_FragCoord.w; back_depth = linear_depth( back_depth, 0.1, 2100.0 ); float diff = back_depth - front_depth; vec2 ssuv = gl_FragCoord.xy; vec3 vDither = vec3( dot( vec2( 171.0, 231.0 ), ssuv) ); float dither = fract( vDither.g / 71.0 ) - 0.5; if( step(0.0,diff)+dither<0.3 ) discard; } if( uDepthMode == 2 ) { vec2 ssuv = gl_FragCoord.xy; vec3 vDither = vec3( dot( vec2( 171.0, 231.0 ), ssuv) ); float dither = fract( vDither.g / 71.0 ); if( dither