commit 667a1ad909d05e0270ff08e6acf6d6a4a9c403bd
Author: Leszek Koltunski <leszek@distorted.org>
Date:   Thu Jan 19 00:28:45 2017 +0000

    improve Postprocessing; new icon; minor things.

diff --git a/src/main/java/org/distorted/library/EffectNames.java b/src/main/java/org/distorted/library/EffectNames.java
index e32f5c5..0cd9148 100644
--- a/src/main/java/org/distorted/library/EffectNames.java
+++ b/src/main/java/org/distorted/library/EffectNames.java
@@ -241,13 +241,13 @@ public enum EffectNames
 
   /////////////////////////////////////////////////////////////////////////////////
   // POSTPROCESSING EFFECTS.
-  // Always 1 Uniform: 1 per-effect interpolated value.
+  // Always 4 Uniforms: 4 per-effect interpolated values.
  /**
    * Blur the area around the center.
    * <p>
-   * Uniforms: (radius)
+   * Uniforms: (radius,UNUSED,UNUSED,UNUSED)
    * <p>
-   * Unity: radius==0
+   * Unity: radius = 0
    */
   BLUR             ( EffectTypes.POSTPROCESS,new float[] {0.0f}          , 1, false, false );
 
diff --git a/src/main/java/org/distorted/library/EffectQueueFragment.java b/src/main/java/org/distorted/library/EffectQueueFragment.java
index c303866..86e1b0f 100644
--- a/src/main/java/org/distorted/library/EffectQueueFragment.java
+++ b/src/main/java/org/distorted/library/EffectQueueFragment.java
@@ -127,8 +127,8 @@ class EffectQueueFragment extends EffectQueue
         mUniforms[NUM_UNIFORMS*i+7] = mCache[NUM_CACHE*i+3];
         }
 
-      GLES20.glUniform1iv( mTypeH    ,  mNumEffects, mName    ,0);
-      GLES20.glUniform4fv( mUniformsH,2*mNumEffects, mUniforms,0);
+      GLES20.glUniform1iv( mTypeH    ,                 mNumEffects, mName    ,0);
+      GLES20.glUniform4fv( mUniformsH,(NUM_UNIFORMS/4)*mNumEffects, mUniforms,0);
       }  
     }
 
diff --git a/src/main/java/org/distorted/library/EffectQueuePostprocess.java b/src/main/java/org/distorted/library/EffectQueuePostprocess.java
index e0be13a..ce45403 100644
--- a/src/main/java/org/distorted/library/EffectQueuePostprocess.java
+++ b/src/main/java/org/distorted/library/EffectQueuePostprocess.java
@@ -42,11 +42,10 @@ import java.nio.FloatBuffer;
 
 class EffectQueuePostprocess extends EffectQueue
   {
-  private static final int BYTES_PER_FLOAT   = 4;
   private static final int POSITION_DATA_SIZE= 2; // Post Program: size of the position data in elements
   private static final int TEX_DATA_SIZE     = 2; // Post Program: size of the texture coordinate data in elements.
 
-  private static final int NUM_UNIFORMS = 3;
+  private static final int NUM_UNIFORMS = 4;
   private static final int NUM_CACHE    = 0;
   private static final int INDEX = EffectTypes.POSTPROCESS.ordinal();
 
@@ -61,14 +60,15 @@ class EffectQueuePostprocess extends EffectQueue
 
   static
     {
-    int dataLength = 4;
+    int dataLength      = 4;
+    int bytes_per_float = 4;
 
     float[] positionData= { -0.5f, -0.5f,  -0.5f, 0.5f,  0.5f,-0.5f,  0.5f, 0.5f };
     float[] textureData = {  0.0f,  0.0f,   0.0f, 1.0f,  1.0f, 0.0f,  1.0f, 1.0f };
 
-    mQuadPositions = ByteBuffer.allocateDirect(POSITION_DATA_SIZE*dataLength*BYTES_PER_FLOAT).order(ByteOrder.nativeOrder()).asFloatBuffer();
+    mQuadPositions = ByteBuffer.allocateDirect(POSITION_DATA_SIZE*dataLength*bytes_per_float).order(ByteOrder.nativeOrder()).asFloatBuffer();
     mQuadPositions.put(positionData).position(0);
-    mQuadTexture   = ByteBuffer.allocateDirect(TEX_DATA_SIZE     *dataLength*BYTES_PER_FLOAT).order(ByteOrder.nativeOrder()).asFloatBuffer();
+    mQuadTexture   = ByteBuffer.allocateDirect(TEX_DATA_SIZE     *dataLength*bytes_per_float).order(ByteOrder.nativeOrder()).asFloatBuffer();
     mQuadTexture.put(textureData).position(0);
     }
 
@@ -140,11 +140,6 @@ class EffectQueuePostprocess extends EffectQueue
         else mInter[0][i] = null;
         }
 
-      if( mInter[1][i]!=null )
-        {
-        mInter[1][i].interpolateMain(mUniforms, NUM_UNIFORMS*i+1, mCurrentDuration[i], step);
-        }
-
       mCurrentDuration[i] += step;
       }
      
@@ -158,6 +153,7 @@ class EffectQueuePostprocess extends EffectQueue
     mUniforms[NUM_UNIFORMS*index  ] = mUniforms[NUM_UNIFORMS*(index+1)  ];
     mUniforms[NUM_UNIFORMS*index+1] = mUniforms[NUM_UNIFORMS*(index+1)+1];
     mUniforms[NUM_UNIFORMS*index+2] = mUniforms[NUM_UNIFORMS*(index+1)+2];
+    mUniforms[NUM_UNIFORMS*index+3] = mUniforms[NUM_UNIFORMS*(index+1)+3];
     }
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
@@ -184,8 +180,8 @@ class EffectQueuePostprocess extends EffectQueue
 
     if( mNumEffects>0 )
       {
-      GLES20.glUniform1iv( mTypeH    ,  mNumEffects, mName    ,0);
-      GLES20.glUniform4fv( mUniformsH,2*mNumEffects, mUniforms,0);
+      GLES20.glUniform1iv( mTypeH    ,                  mNumEffects, mName    ,0);
+      GLES20.glUniform4fv( mUniformsH, (NUM_UNIFORMS/4)*mNumEffects, mUniforms,0);
       }
 
     GLES20.glVertexAttribPointer(mProgram.mAttribute[0], POSITION_DATA_SIZE, GLES20.GL_FLOAT, false, 0, mQuadPositions);
diff --git a/src/main/java/org/distorted/library/EffectQueueVertex.java b/src/main/java/org/distorted/library/EffectQueueVertex.java
index fb80362..b34c63b 100644
--- a/src/main/java/org/distorted/library/EffectQueueVertex.java
+++ b/src/main/java/org/distorted/library/EffectQueueVertex.java
@@ -146,8 +146,8 @@ class EffectQueueVertex extends EffectQueue
         mUniforms[NUM_UNIFORMS*i+7] = mCache[NUM_CACHE*i+2]-halfZ;
         }
 
-      GLES20.glUniform1iv( mTypeH    ,  mNumEffects, mName    ,0);
-      GLES20.glUniform4fv( mUniformsH,3*mNumEffects, mUniforms,0);
+      GLES20.glUniform1iv( mTypeH    ,                 mNumEffects, mName    ,0);
+      GLES20.glUniform4fv( mUniformsH,(NUM_UNIFORMS/4)*mNumEffects, mUniforms,0);
       }
     }
 
diff --git a/src/main/res/raw/post_fragment_shader.glsl b/src/main/res/raw/post_fragment_shader.glsl
index 44b6712..231afa9 100644
--- a/src/main/res/raw/post_fragment_shader.glsl
+++ b/src/main/res/raw/post_fragment_shader.glsl
@@ -22,26 +22,27 @@ precision lowp float;
 varying vec2 v_TexCoordinate;
 uniform sampler2D u_Texture;
 uniform vec2 u_objD;
-uniform int pNumEffects;                   // total number of postprocessing effects
+uniform int pNumEffects;                 // total number of postprocessing effects
 
 #if NUM_POSTPROCESS>0
-uniform int pType[NUM_POSTPROCESS];        // their types.
-uniform vec4 pUniforms[2*NUM_POSTPROCESS]; // i-th effect is 2 consecutive vec4's: [2*i], [2*i+1].
+uniform int pType[NUM_POSTPROCESS];      // their types.
+uniform vec4 pUniforms[NUM_POSTPROCESS]; // i-th effect is 1 vec4: [i].
 
 //////////////////////////////////////////////////////////////////////////////////////////////
 // BLUR EFFECT
 
-void blur(out vec4 pixel)
+void blur(out vec4 pixel,float radius)
   {
   pixel = vec4(0.0);
 
   float blurSizeH = 1.0 / u_objD.x;
   float blurSizeV = 1.0 / u_objD.y;
+  float denom     = 1.0 / ((2.0*radius+1.0)*(2.0*radius+1.0));
 
-  for (float x = -4.0; x <= 4.0; x+=1.0)
-    for (float y = -4.0; y <= 4.0; y+=1.0)
+  for (float x = -radius; x <= radius; x+=1.0)
+    for (float y = -radius; y <= radius; y+=1.0)
       {
-      pixel += texture2D( u_Texture, vec2(v_TexCoordinate.x + x * blurSizeH, v_TexCoordinate.y + y * blurSizeV) ) / 81.0;
+      pixel += texture2D( u_Texture, vec2(v_TexCoordinate.x + x*blurSizeH, v_TexCoordinate.y + y*blurSizeV) ) *denom;
       }
   }
 
@@ -56,7 +57,7 @@ void main()
 #if NUM_POSTPROCESS>0
   for(int i=0; i<pNumEffects; i++)
     {
-    if( pType[i]==BLUR ) blur(pixel);
+    if( pType[i]==BLUR ) blur(pixel,pUniforms[i].x);
     }
 #endif
 
