Toon outline shader problem

Recently, I found this shader for the BGE. And it works nice! And it is very short and ligth.
But, i have a problem when the camera is near to the object:



You can see the faces are flat.
This is the shader:

 uniform sampler2D bgl_RenderedTexture;    uniform sampler2D bgl_DepthTexture;


    void main()
    {
       float depth = texture2D( bgl_DepthTexture, gl_TexCoord[0].xy).r;
       float depth2 = texture2D( bgl_DepthTexture, gl_TexCoord[0].xy + vec2(0,0.002)).r;
       float depth3 = texture2D( bgl_DepthTexture, gl_TexCoord[0].xy + vec2(0.002,0)).r;
       
       float fac = abs(depth-depth2) + abs(depth-depth3);
       
       float intensity = 300;


       vec4 sub = vec4(fac*intensity,fac*intensity,fac*intensity,0);
       
       gl_FragColor = texture2D( bgl_RenderedTexture, gl_TexCoord[0].xy ) - sub;
    }

It has solution? Exist better ways to achieve the outline in BGE (without duplicated meshes, please)?