commit bfe2c61b82cbe2db9b99b0807dbd0e789f737e45
Author: Leszek Koltunski <leszek@distoretedandroid.org>
Date:   Tue Jan 10 10:27:42 2017 +0000

    Blurred image visible now!

diff --git a/src/main/java/org/distorted/library/DistortedEffects.java b/src/main/java/org/distorted/library/DistortedEffects.java
index 5497484..e04d946 100644
--- a/src/main/java/org/distorted/library/DistortedEffects.java
+++ b/src/main/java/org/distorted/library/DistortedEffects.java
@@ -159,7 +159,7 @@ public class DistortedEffects
       GLES20.glViewport(0, 0, df.mWidth, df.mHeight);
       mBufferFBO.setAsInput();
       df.setAsOutput();
-      mP.send(halfInputW,halfInputH);
+      mP.send(df,halfInputW,halfInputH);
 
       GLES20.glVertexAttribPointer(Distorted.mPostProgramAttributes[0], POSITION_DATA_SIZE, GLES20.GL_FLOAT, false, 0, mQuadPositions);
       GLES20.glVertexAttribPointer(Distorted.mPostProgramAttributes[1], TEX_DATA_SIZE     , GLES20.GL_FLOAT, false, 0, mQuadTexture);
@@ -176,7 +176,7 @@ public class DistortedEffects
     EffectQueueMatrix.sendZero(df,halfInputW,halfInputH,halfInputW*mesh.zFactor);
     EffectQueueVertex.sendZero();
     EffectQueueFragment.sendZero();
-    EffectQueuePostprocess.sendZero(2*halfInputW,2*halfInputH);
+    EffectQueuePostprocess.sendZero(df,2*halfInputW,2*halfInputH);
 
     mesh.draw();
     }
diff --git a/src/main/java/org/distorted/library/EffectQueuePostprocess.java b/src/main/java/org/distorted/library/EffectQueuePostprocess.java
index 468eccd..f22e77b 100644
--- a/src/main/java/org/distorted/library/EffectQueuePostprocess.java
+++ b/src/main/java/org/distorted/library/EffectQueuePostprocess.java
@@ -20,6 +20,7 @@
 package org.distorted.library;
 
 import android.opengl.GLES20;
+import android.opengl.Matrix;
 
 import org.distorted.library.message.EffectMessage;
 import org.distorted.library.type.Data1D;
@@ -41,6 +42,10 @@ class EffectQueuePostprocess extends EffectQueue
   private static int mTypeH;
   private static int mUniformsH;
   private static int mObjDH;
+  private static int mMVPMatrixH;
+
+  private static float[] mMVPMatrix = new float[16];
+  private static float[] mTmpMatrix = new float[16];
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
@@ -57,6 +62,7 @@ class EffectQueuePostprocess extends EffectQueue
     mTypeH      = GLES20.glGetUniformLocation( mProgramH, "pType");
     mUniformsH  = GLES20.glGetUniformLocation( mProgramH, "pUniforms");
     mObjDH      = GLES20.glGetUniformLocation( mProgramH, "u_objD");
+    mMVPMatrixH = GLES20.glGetUniformLocation(mProgramH, "u_MVPMatrix");
     }
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
@@ -109,10 +115,15 @@ class EffectQueuePostprocess extends EffectQueue
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
-  synchronized void send(float halfX, float halfY)
+  synchronized void send(DistortedFramebuffer df, float halfX, float halfY)
     {
+    Matrix.setIdentityM(mTmpMatrix, 0);
+    Matrix.translateM(mTmpMatrix, 0, halfX-df.mWidth/2, df.mHeight/2-halfY, -df.mDistance);
+    Matrix.multiplyMM(mMVPMatrix, 0, df.mProjectionMatrix, 0, mTmpMatrix, 0);
+
     GLES20.glUniform1i( mNumEffectsH, mNumEffects);
     GLES20.glUniform2f( mObjDH , halfX, halfY);
+    GLES20.glUniformMatrix4fv(mMVPMatrixH, 1, false, mMVPMatrix , 0);
 
     if( mNumEffects>0 )
       {
@@ -123,10 +134,15 @@ class EffectQueuePostprocess extends EffectQueue
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
-  synchronized static void sendZero(float halfX, float halfY)
+  synchronized static void sendZero(DistortedFramebuffer df, float halfX, float halfY)
     {
+    Matrix.setIdentityM(mTmpMatrix, 0);
+    Matrix.translateM(mTmpMatrix, 0, halfX-df.mWidth/2, df.mHeight/2-halfY, -df.mDistance);
+    Matrix.multiplyMM(mMVPMatrix, 0, df.mProjectionMatrix, 0, mTmpMatrix, 0);
+
     GLES20.glUniform1i( mNumEffectsH, 0);
     GLES20.glUniform2f( mObjDH , halfX, halfY);
+    GLES20.glUniformMatrix4fv(mMVPMatrixH, 1, false, mMVPMatrix , 0);
     }
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
diff --git a/src/main/res/raw/main_vertex_shader.glsl b/src/main/res/raw/main_vertex_shader.glsl
index f528226..25e72f1 100644
--- a/src/main/res/raw/main_vertex_shader.glsl
+++ b/src/main/res/raw/main_vertex_shader.glsl
@@ -25,12 +25,12 @@ uniform float u_Depth;               // max absolute value of v.z ; beyond that
                                      // .far = f, .diff = f-n so maybe u_Depth is redundant
                                      // Update: this struct is only available in fragment shaders
                                 
-uniform mat4 u_MVPMatrix;            // A constant representing the combined model/view/projection matrix.
-uniform mat4 u_MVMatrix;             // A constant representing the combined model/view matrix.
+uniform mat4 u_MVPMatrix;            // the combined model/view/projection matrix.
+uniform mat4 u_MVMatrix;             // the combined model/view matrix.
 		 
-attribute vec3 a_Position;           // Per-vertex position information we will pass in.
-attribute vec3 a_Normal;             // Per-vertex normal information we will pass in.
-attribute vec2 a_TexCoordinate;      // Per-vertex texture coordinate information we will pass in.
+attribute vec3 a_Position;           // Per-vertex position.
+attribute vec3 a_Normal;             // Per-vertex normal vector.
+attribute vec2 a_TexCoordinate;      // Per-vertex texture coordinate.
 		  
 varying vec3 v_Position;             //
 varying vec3 v_Normal;               //
diff --git a/src/main/res/raw/post_vertex_shader.glsl b/src/main/res/raw/post_vertex_shader.glsl
index 1f0b576..8a77002 100644
--- a/src/main/res/raw/post_vertex_shader.glsl
+++ b/src/main/res/raw/post_vertex_shader.glsl
@@ -19,6 +19,7 @@
 
 uniform vec2 u_objD;             // half of object width x half of object height.
                                  // point (0,0) is the center of the object
+uniform mat4 u_MVPMatrix;        // the combined model/view/projection matrix.
 
 attribute vec2 a_Position;       // Per-vertex position information we will pass in.
 attribute vec2 a_TexCoordinate;  // Per-vertex texture coordinate information we will pass in.
@@ -30,5 +31,5 @@ varying   vec2 v_TexCoordinate;  //
 void main()
   {
   v_TexCoordinate = a_TexCoordinate;
-  gl_Position = vec4( 2.0*u_objD*a_Position, 0.0, 1.0);
+  gl_Position     = u_MVPMatrix*vec4( 2.0*u_objD*a_Position, 0.0, 1.0);
   }
\ No newline at end of file
