uniform sampler2D ParticlesShot; uniform sampler2D FinalRender; uniform vec4 parameters; float getGrey(vec4 color) { return dot(color, vec4(0.30, 0.59, 0.11, 0.0)); } void main(void) { float yComponents[4]; vec3 normal; vec2 offsets[4], sampler; offsets[0] = vec2(-parameters.x, 0.0); offsets[1] = vec2( parameters.x, 0.0); offsets[2] = vec2( 0.0,-parameters.y); offsets[3] = vec2( 0.0, parameters.y); for(int i = 0; i < 4; i++) yComponents[i] = getGrey(texture2D(ParticlesShot, gl_TexCoord[0].xy + offsets[i])); normal.x = yComponents[0] - yComponents[1]; normal.z = yComponents[2] - yComponents[3]; normal.y = 0.05; normal = normalize(normal); sampler = vec2(normal.x*parameters.z + gl_TexCoord[0].x, normal.z*parameters.w + gl_TexCoord[0].y); gl_FragColor = texture2D(FinalRender, sampler); }