commit a7067deb5c68b457ff362faef94738fc563e16a1
Author: Leszek Koltunski <leszek@distorted.org>
Date:   Thu Sep 15 22:04:08 2016 +0100

    small improvements in DISTORT

diff --git a/src/main/java/org/distorted/library/EffectQueueVertex.java b/src/main/java/org/distorted/library/EffectQueueVertex.java
index 29aeb7a..e69c008 100644
--- a/src/main/java/org/distorted/library/EffectQueueVertex.java
+++ b/src/main/java/org/distorted/library/EffectQueueVertex.java
@@ -179,6 +179,10 @@ class EffectQueueVertex extends EffectQueue
       mUniforms[NUM_UNIFORMS*effect+3] = (float)Math.sin(d);
       mUniforms[NUM_UNIFORMS*effect+5] = (float)Math.cos(d);
       }
+    if( mName[effect]==EffectNames.DISTORT.ordinal() )
+      {
+      mUniforms[NUM_UNIFORMS*effect+1] =-mUniforms[NUM_UNIFORMS*effect+1];
+      }
     }
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
diff --git a/src/main/res/raw/main_fragment_shader.glsl b/src/main/res/raw/main_fragment_shader.glsl
index 8f19392..246e846 100644
--- a/src/main/res/raw/main_fragment_shader.glsl
+++ b/src/main/res/raw/main_fragment_shader.glsl
@@ -105,5 +105,5 @@ void main()
     }
 #endif
 
-  gl_FragColor = vec4(pixel.rgb * 0.5 * (v_Normal.z+1.0), pixel.a);
+  gl_FragColor = vec4(pixel.rgb * v_Normal.z, pixel.a);
   }
\ No newline at end of file
diff --git a/src/main/res/raw/main_vertex_shader.glsl b/src/main/res/raw/main_vertex_shader.glsl
index 5402707..a093478 100644
--- a/src/main/res/raw/main_vertex_shader.glsl
+++ b/src/main/res/raw/main_vertex_shader.glsl
@@ -285,47 +285,22 @@ void distort(in int effect, inout vec4 v, inout vec4 n)
   {
   vec2 center = vUniforms[effect+1].zw;
   vec2 ps = center-v.xy;
+  vec3 force = vUniforms[effect].xyz;
   float d = degree(vUniforms[effect+2],center,ps);
-  vec2 w = vec2(vUniforms[effect].x, -vUniforms[effect].y);
-  float uz = vUniforms[effect].z;                                         // height of the bubble
-  float denominator = dot(ps+(1.0-d)*w,ps);
-  float one_over_denom = 1.0/(denominator-0.001*(sign(denominator)-1.0)); // = denominator==0 ? 1000:1/denominator;
+  float denom = dot(ps+(1.0-d)*force.xy,ps);
+  float one_over_denom = 1.0/(denom-0.001*(sign(denom)-1.0));          // = denom==0 ? 1000:1/denom;
 
-  //v.z += uz*d;                                                          // cone
-  //b = -(uz*(1.0-d))*one_over_denom;                                     //
+  //v.z += force.z*d;                                                  // cone
+  //b = -(force.z*(1.0-d))*one_over_denom;                             //
         
-  //v.z += uz*d*d*(3.0-2.0*d);                                            // thin bubble
-  //b = -(6.0*uz*d*(1.0-d)*(1.0-d))*one_over_denom;                       //
+  //v.z += force.z*d*d*(3.0-2.0*d);                                    // thin bubble
+  //b = -(6.0*force.z*d*(1.0-d)*(1.0-d))*one_over_denom;               //
         
-  v.z += uz*d*d*(3.0*d*d -8.0*d +6.0);                                    // thick bubble
-  float b = -(12.0*uz*d*(1.0-d)*(1.0-d)*(1.0-d))*one_over_denom;          //
+  v.z += force.z*d*d*(3.0*d*d -8.0*d +6.0);                            // thick bubble
+  float b = -(12.0*force.z*d*(1.0-d)*(1.0-d)*(1.0-d))*one_over_denom;  //
                 
-  v.xy += d*w;
-
-  float l= dot(ps,ps);
-  float psx,psy;
-
-  if( l==0.0 )
-    {
-    psx = 0.0;
-    psy = 0.0;
-    }
-  else
-    {
-    float len = sqrt(l);
-    psx = ps.x / len;
-    psy = ps.y / len;
-    }
-
-  float e = b*b*l;
-  float cosA = sqrt(1.0/(1.0+e));
-  float sinA = sign(uz)*sqrt(e)*cosA;
-  float t1 = sinA*n.z;
-  float t2 = (1.0-cosA)*(psy*n.x-psx*n.y);
-
-  n.x = cosA*n.x - t1*psx + t2*psy;
-  n.y = cosA*n.y - t1*psy - t2*psx;
-  n.z = cosA*n.z + sinA*(psy*n.y + psx*n.x);
+  v.xy += d*force.xy;
+  n.xy += n.z*b*ps;
   }
  
 //////////////////////////////////////////////////////////////////////////////////////////////
