commit 4018b3b749ecf37d57ac24be348d81ebae67f4d3
Author: Leszek Koltunski <leszek@distorted.org>
Date:   Wed Jun 29 21:57:17 2016 +0100

    fix fragment effects :)

diff --git a/src/main/res/raw/main_fragment_shader.glsl b/src/main/res/raw/main_fragment_shader.glsl
index 8dab8b5..0a67607 100644
--- a/src/main/res/raw/main_fragment_shader.glsl
+++ b/src/main/res/raw/main_fragment_shader.glsl
@@ -33,57 +33,62 @@ uniform int fType[NUM_FRAGMENT];        // their types.
 uniform vec4 fUniforms[2*NUM_FRAGMENT]; // i-th effect is 2 consecutive vec4's: [2*i], [2*i+1]. First vec4 is the Interpolated values,
                                         // next describes the Region, i.e. area over which the effect is active.
 
-const vec3 LUMI = vec3( 0.2125, 0.7154, 0.0721 );                                        
- 
+const vec3 LUMI3= vec3( 0.2125, 0.7154, 0.0721 );
+const vec3 ZERO3= vec3(0.0,0.0,0.0);
+const vec3 HALF3= vec3(0.5,0.5,0.5);
+const vec2 ONE2 = vec2(1.0,1.0);
+const vec2 HALF2= vec2(0.5,0.5);
+
 //////////////////////////////////////////////////////////////////////////////////////////////
 // MACROBLOCK EFFECT
 
-void macroblock(float degree, int effect, inout vec2 tex)
+void macroblock(float degree, int effect, inout vec4 pixel)
   {
-  vec2 one = vec2(1.0,1.0);  
-  vec2 a = degree*(fUniforms[effect].yz-one)+one;
-  tex = ( max((1.0-degree)*tex,floor(tex*a)) + degree*vec2(0.5,0.5) ) / a;
+  vec2 a = degree*(fUniforms[effect].yz-ONE2)+ONE2;
+  vec2 tex = ( max((1.0-degree)*v_TexCoordinate,floor(v_TexCoordinate*a)) + degree*HALF2 ) / a;
+
+  pixel = texture2D(u_Texture, tex);
   }
 
 //////////////////////////////////////////////////////////////////////////////////////////////
 // CHROMA EFFECT
 
-void chroma(float degree, int effect, inout vec4 color)
+void chroma(float degree, int effect, inout vec4 pixel)
   {
-  color.rgb = mix(color.rgb, fUniforms[effect].yzw, degree*fUniforms[effect].x);
+  pixel = vec4( mix( pixel.rgb, fUniforms[effect].yzw, degree*fUniforms[effect].x), pixel.a);
   }
 
 //////////////////////////////////////////////////////////////////////////////////////////////
 // ALPHA EFFECT (change transparency level)
 
-void alpha(float degree, int effect, inout vec4 color)
+void alpha(float degree, int effect, inout vec4 pixel)
   {
-  color.a *= (degree*(fUniforms[effect].x-1.0)+1.0); 
+  pixel.a *= (degree*(fUniforms[effect].x-1.0)+1.0);
   }
 
 //////////////////////////////////////////////////////////////////////////////////////////////
 // BRIGHTNESS EFFECT
 
-void brightness(float degree, int effect, inout vec4 color)
+void brightness(float degree, int effect, inout vec4 pixel)
   {
-  color.rgb = mix(vec3(0.0,0.0,0.0), color.rgb, degree*(fUniforms[effect].x-1.0)+1.0 ); 
+  pixel.rgb = mix(ZERO3, pixel.rgb, degree*(fUniforms[effect].x-1.0)+1.0 );
   }
-  
+
 //////////////////////////////////////////////////////////////////////////////////////////////
 // CONTRAST EFFECT
 
-void contrast(float degree, int effect, inout vec4 color)
+void contrast(float degree, int effect, inout vec4 pixel)
   {
-  color.rgb = mix(vec3(0.5,0.5,0.5), color.rgb, degree*(fUniforms[effect].x-1.0)+1.0 ); 
+  pixel.rgb = mix(HALF3, pixel.rgb, degree*(fUniforms[effect].x-1.0)+1.0 );
   }
 
 //////////////////////////////////////////////////////////////////////////////////////////////
 // SATURATION EFFECT
 
-void saturation(float degree, int effect, inout vec4 color)
+void saturation(float degree, int effect, inout vec4 pixel)
   {
-  float luminance = dot(LUMI,color.rgb);
-  color.rgb = mix(vec3(luminance,luminance,luminance), color.rgb, degree*(fUniforms[effect].x-1.0)+1.0 ); 
+  float luminance = dot(LUMI3,pixel.rgb);
+  pixel.rgb = mix(vec3(luminance,luminance,luminance), pixel.rgb, degree*(fUniforms[effect].x-1.0)+1.0 );
   }
 
 #endif
@@ -92,30 +97,30 @@ void saturation(float degree, int effect, inout vec4 color)
 
 void main()                    		
   {  
-  vec2 tex = v_TexCoordinate;
-  vec4 col = vec4(1.0,1.0,1.0,1.0);
+  vec4 pixel = texture2D(u_Texture, v_TexCoordinate);
+
+#if NUM_FRAGMENT>0
   vec2 diff;
   float pointDegree;
-  
-#if NUM_FRAGMENT>0  
+
   for(int i=0; i<fNumEffects; i++)
     {
     diff = (v_Position.xy - fUniforms[2*i+1].xy)/fUniforms[2*i+1].zw;
     pointDegree = max(0.0,1.0-dot(diff,diff));
 
-         if( fType[i]==MACROBLOCK        ) macroblock(sign(pointDegree),2*i,tex);
-    else if( fType[i]==CHROMA            ) chroma    (sign(pointDegree),2*i,col);
-    else if( fType[i]==SMOOTH_CHROMA     ) chroma    (     pointDegree ,2*i,col);
-    else if( fType[i]==ALPHA             ) alpha     (sign(pointDegree),2*i,col);
-    else if( fType[i]==SMOOTH_ALPHA      ) alpha     (     pointDegree ,2*i,col);
-    else if( fType[i]==BRIGHTNESS        ) brightness(sign(pointDegree),2*i,col);
-    else if( fType[i]==SMOOTH_BRIGHTNESS ) brightness(     pointDegree ,2*i,col);
-    else if( fType[i]==CONTRAST          ) contrast  (sign(pointDegree),2*i,col);
-    else if( fType[i]==SMOOTH_CONTRAST   ) contrast  (     pointDegree ,2*i,col);
-    else if( fType[i]==SATURATION        ) saturation(sign(pointDegree),2*i,col);
-    else if( fType[i]==SMOOTH_SATURATION ) saturation(     pointDegree ,2*i,col);
+         if( fType[i]==MACROBLOCK        ) macroblock(sign(pointDegree),2*i, pixel);
+    else if( fType[i]==CHROMA            ) chroma    (sign(pointDegree),2*i, pixel);
+    else if( fType[i]==SMOOTH_CHROMA     ) chroma    (     pointDegree ,2*i, pixel);
+    else if( fType[i]==ALPHA             ) alpha     (sign(pointDegree),2*i, pixel);
+    else if( fType[i]==SMOOTH_ALPHA      ) alpha     (     pointDegree ,2*i, pixel);
+    else if( fType[i]==BRIGHTNESS        ) brightness(sign(pointDegree),2*i, pixel);
+    else if( fType[i]==SMOOTH_BRIGHTNESS ) brightness(     pointDegree ,2*i, pixel);
+    else if( fType[i]==CONTRAST          ) contrast  (sign(pointDegree),2*i, pixel);
+    else if( fType[i]==SMOOTH_CONTRAST   ) contrast  (     pointDegree ,2*i, pixel);
+    else if( fType[i]==SATURATION        ) saturation(sign(pointDegree),2*i, pixel);
+    else if( fType[i]==SMOOTH_SATURATION ) saturation(     pointDegree ,2*i, pixel);
     }
 #endif
  
-  gl_FragColor = (col * 0.5 * (v_Normal.z+1.0) * texture2D(u_Texture, tex));
+  gl_FragColor = pixel*0.5*(v_Normal.z+1.0);
   }
\ No newline at end of file
