commit ed5bf324028cc046127e6a974ea3c66c02bfa2b7
Author: Leszek Koltunski <leszek@distoretedandroid.org>
Date:   Fri Mar 31 12:52:54 2017 +0100

    Merging blurred surfaces mostly ok now (blurred image still appears a bit shifted down for some reason)

diff --git a/src/main/java/org/distorted/library/EffectQueuePostprocess.java b/src/main/java/org/distorted/library/EffectQueuePostprocess.java
index 4eba577..e7d673b 100644
--- a/src/main/java/org/distorted/library/EffectQueuePostprocess.java
+++ b/src/main/java/org/distorted/library/EffectQueuePostprocess.java
@@ -49,7 +49,7 @@ class EffectQueuePostprocess extends EffectQueue
   private static final int NUM_CACHE    = 0;
   private static final int INDEX = EffectTypes.POSTPROCESS.ordinal();
 
-  private static final FloatBuffer mQuadPositions, mQuadTextureNor, mQuadTextureInv;
+  private static final FloatBuffer mQuadPositions, mQuadTexture;
 
   static
     {
@@ -58,14 +58,11 @@ class EffectQueuePostprocess extends EffectQueue
 
     float[] position  = { -0.5f, -0.5f,  -0.5f, 0.5f,  0.5f,-0.5f,  0.5f, 0.5f };
     float[] textureNor= {  0.0f,  0.0f,   0.0f, 1.0f,  1.0f, 0.0f,  1.0f, 1.0f };
-    float[] textureInv= {  0.0f,  0.0f,   1.0f, 0.0f,  0.0f, 1.0f,  1.0f, 1.0f };
 
     mQuadPositions = ByteBuffer.allocateDirect(POS_DATA_SIZE*dataLength*bytes_per_float).order(ByteOrder.nativeOrder()).asFloatBuffer();
     mQuadPositions.put(position).position(0);
-    mQuadTextureNor= ByteBuffer.allocateDirect(TEX_DATA_SIZE*dataLength*bytes_per_float).order(ByteOrder.nativeOrder()).asFloatBuffer();
-    mQuadTextureNor.put(textureNor).position(0);
-    mQuadTextureInv= ByteBuffer.allocateDirect(TEX_DATA_SIZE*dataLength*bytes_per_float).order(ByteOrder.nativeOrder()).asFloatBuffer();
-    mQuadTextureInv.put(textureInv).position(0);
+    mQuadTexture= ByteBuffer.allocateDirect(TEX_DATA_SIZE*dataLength*bytes_per_float).order(ByteOrder.nativeOrder()).asFloatBuffer();
+    mQuadTexture.put(textureNor).position(0);
     }
 
   private static DistortedFramebuffer mPostBuffer = new DistortedFramebuffer(true,DistortedSurface.TYPE_SYST,1,1);
@@ -288,7 +285,7 @@ class EffectQueuePostprocess extends EffectQueue
       for(int i=0; i<=radius; i++) mOffsets[i] = offsetsCache[offset+i]/h;
       GLES30.glUniform1fv( mOffsets1H ,radius+1, mOffsets,0);
       GLES30.glVertexAttribPointer(mBlur1Program.mAttribute[0], POS_DATA_SIZE, GLES30.GL_FLOAT, false, 0, mQuadPositions);
-      GLES30.glVertexAttribPointer(mBlur1Program.mAttribute[1], TEX_DATA_SIZE, GLES30.GL_FLOAT, false, 0, mQuadTextureInv);
+      GLES30.glVertexAttribPointer(mBlur1Program.mAttribute[1], TEX_DATA_SIZE, GLES30.GL_FLOAT, false, 0, mQuadTexture);
       GLES30.glDrawArrays(GLES30.GL_TRIANGLE_STRIP, 0, 4);
 
       // vertical blur
@@ -305,7 +302,7 @@ class EffectQueuePostprocess extends EffectQueue
       for(int i=0; i<=radius; i++) mOffsets[i] = offsetsCache[offset+i]/w;
       GLES30.glUniform1fv( mOffsets2H ,radius+1, mOffsets,0);
       GLES30.glVertexAttribPointer(mBlur2Program.mAttribute[0], POS_DATA_SIZE, GLES30.GL_FLOAT, false, 0, mQuadPositions);
-      GLES30.glVertexAttribPointer(mBlur2Program.mAttribute[1], TEX_DATA_SIZE, GLES30.GL_FLOAT, false, 0, mQuadTextureInv);
+      GLES30.glVertexAttribPointer(mBlur2Program.mAttribute[1], TEX_DATA_SIZE, GLES30.GL_FLOAT, false, 0, mQuadTexture);
       GLES30.glDrawArrays(GLES30.GL_TRIANGLE_STRIP, 0, 4);
       }
 
diff --git a/src/main/res/raw/blur2_fragment_shader.glsl b/src/main/res/raw/blur2_fragment_shader.glsl
index 515f405..9138d6c 100644
--- a/src/main/res/raw/blur2_fragment_shader.glsl
+++ b/src/main/res/raw/blur2_fragment_shader.glsl
@@ -46,8 +46,8 @@ void main()
 
   for (int i=1; i<=u_Radius; i+=1)
     {
-    pixel += ( TEXTURE(u_ColorTexture,vec2(v_TexCoordinate.x+u_Offsets[i],v_TexCoordinate.y)) +
-               TEXTURE(u_ColorTexture,vec2(v_TexCoordinate.x-u_Offsets[i],v_TexCoordinate.y)) ) * u_Weights[i];
+    pixel += ( TEXTURE(u_ColorTexture,vec2(v_TexCoordinate.x,v_TexCoordinate.y+u_Offsets[i])) +
+               TEXTURE(u_ColorTexture,vec2(v_TexCoordinate.x,v_TexCoordinate.y-u_Offsets[i])) ) * u_Weights[i];
     }
 
   FRAG_COLOR = pixel;
