What are some good underwater/distort 2d Filters?

Hi youle, your shader have some errors on my pc, you are trying to do math operations with int and floats (what is not supported by some cards), here a fixed shader:

uniform sampler2D bgl_RenderedTexture;
uniform sampler2D bgl_DepthTexture;
uniform float timer;

vec2 texcoord = vec2(gl_TexCoord[0]).st;
vec2 cancoord = vec2(gl_TexCoord[3]).st;

float near = 0.0;
float far = 100.0;

float camNear = 0.1; //camera clipping start
float camFar = 100.0; //camera clipping end

float R = 0.4;
float G = 0.5;
float B = 0.6;

float linearize(float depth)
{
    return -camFar * camNear / (depth * (camFar - camNear) - camFar);
}

void main(void)
{
    texcoord.y = texcoord.y + (sin(cancoord.x*4.0+timer*2.0)*0.01);
    texcoord.x = texcoord.x + (cos(cancoord.y*4.0+timer*2.0)*0.01);
    
    float depth = linearize(texture2D(bgl_DepthTexture,texcoord.xy).x);
    
    vec4 fog = vec4(R,G,B,0.0);

    float factor = 1.0/clamp((depth-near)/(far - near), 0.0, 1.0)*0.05;
    
    if (factor>0.99999)
    {
        factor = 0.0; 
    }else{ 
        factor *= 1.0;
    }  

    vec4 tex = texture2D(bgl_RenderedTexture, texcoord);
    

    gl_FragColor = mix(fog, tex, factor);
    
}

Maybe that’s why It does not work with adrian, and why all those cubes have the shader? it is an 2d shader, you just have to use one filter 2d actuator.