commit 2b942cd0dd5751114d085cc8f501687acb2302e1
Author: Leszek Koltunski <leszek@distorted.org>
Date:   Tue Jan 10 21:24:21 2017 +0000

    Naive implementation of blur works now!

diff --git a/src/main/java/org/distorted/library/DistortedEffects.java b/src/main/java/org/distorted/library/DistortedEffects.java
index e04d946..7aa98d4 100644
--- a/src/main/java/org/distorted/library/DistortedEffects.java
+++ b/src/main/java/org/distorted/library/DistortedEffects.java
@@ -146,24 +146,37 @@ public class DistortedEffects
       }
     else
       {
-      mBufferFBO.resizeFast(df.mWidth, df.mHeight);
-      mBufferFBO.setAsOutput();
-
-      mM.send(mBufferFBO,halfInputW,halfInputH,halfZ);
-      mV.send(halfInputW,halfInputH,halfZ);
-      mF.send(halfInputW,halfInputH);
-
-      mesh.draw();
-
-      GLES20.glUseProgram(Distorted.postProgramH);
-      GLES20.glViewport(0, 0, df.mWidth, df.mHeight);
-      mBufferFBO.setAsInput();
-      df.setAsOutput();
-      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);
-      GLES20.glDrawArrays(GLES20.GL_TRIANGLE_STRIP, 0, 4);
+      if( mV.mNumEffects>0 || mP.mNumEffects>0 )
+        {
+        mBufferFBO.resizeFast(df.mWidth, df.mHeight);
+        mBufferFBO.setAsOutput();
+
+        mM.send(mBufferFBO,halfInputW,halfInputH,halfZ);
+        mV.send(halfInputW,halfInputH,halfZ);
+        mF.send(halfInputW,halfInputH);
+
+        mesh.draw();
+
+        GLES20.glUseProgram(Distorted.postProgramH);
+        GLES20.glViewport(0, 0, df.mWidth, df.mHeight);
+        mBufferFBO.setAsInput();
+        df.setAsOutput();
+        mP.send(df);
+
+        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);
+        GLES20.glDrawArrays(GLES20.GL_TRIANGLE_STRIP, 0, 4);
+        }
+      else
+        {
+        GLES20.glUseProgram(Distorted.postProgramH);
+        GLES20.glViewport(0, 0, df.mWidth, df.mHeight);
+        mP.send(df);
+
+        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);
+        GLES20.glDrawArrays(GLES20.GL_TRIANGLE_STRIP, 0, 4);
+        }
       }
     }
 
@@ -176,7 +189,7 @@ public class DistortedEffects
     EffectQueueMatrix.sendZero(df,halfInputW,halfInputH,halfInputW*mesh.zFactor);
     EffectQueueVertex.sendZero();
     EffectQueueFragment.sendZero();
-    EffectQueuePostprocess.sendZero(df,2*halfInputW,2*halfInputH);
+    EffectQueuePostprocess.sendZero(df);
 
     mesh.draw();
     }
diff --git a/src/main/java/org/distorted/library/EffectQueuePostprocess.java b/src/main/java/org/distorted/library/EffectQueuePostprocess.java
index f22e77b..124832b 100644
--- a/src/main/java/org/distorted/library/EffectQueuePostprocess.java
+++ b/src/main/java/org/distorted/library/EffectQueuePostprocess.java
@@ -115,14 +115,14 @@ class EffectQueuePostprocess extends EffectQueue
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
-  synchronized void send(DistortedFramebuffer df, float halfX, float halfY)
+  synchronized void send(DistortedFramebuffer df)
     {
     Matrix.setIdentityM(mTmpMatrix, 0);
-    Matrix.translateM(mTmpMatrix, 0, halfX-df.mWidth/2, df.mHeight/2-halfY, -df.mDistance);
+    Matrix.translateM(mTmpMatrix, 0, 0, 0, -df.mDistance);
     Matrix.multiplyMM(mMVPMatrix, 0, df.mProjectionMatrix, 0, mTmpMatrix, 0);
 
     GLES20.glUniform1i( mNumEffectsH, mNumEffects);
-    GLES20.glUniform2f( mObjDH , halfX, halfY);
+    GLES20.glUniform2f( mObjDH , df.mWidth, df.mHeight);
     GLES20.glUniformMatrix4fv(mMVPMatrixH, 1, false, mMVPMatrix , 0);
 
     if( mNumEffects>0 )
@@ -134,14 +134,14 @@ class EffectQueuePostprocess extends EffectQueue
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
-  synchronized static void sendZero(DistortedFramebuffer df, float halfX, float halfY)
+  synchronized static void sendZero(DistortedFramebuffer df)
     {
     Matrix.setIdentityM(mTmpMatrix, 0);
-    Matrix.translateM(mTmpMatrix, 0, halfX-df.mWidth/2, df.mHeight/2-halfY, -df.mDistance);
+    Matrix.translateM(mTmpMatrix, 0, 0, 0, -df.mDistance);
     Matrix.multiplyMM(mMVPMatrix, 0, df.mProjectionMatrix, 0, mTmpMatrix, 0);
 
     GLES20.glUniform1i( mNumEffectsH, 0);
-    GLES20.glUniform2f( mObjDH , halfX, halfY);
+    GLES20.glUniform2f( mObjDH , df.mWidth, df.mHeight);
     GLES20.glUniformMatrix4fv(mMVPMatrixH, 1, false, mMVPMatrix , 0);
     }
 
diff --git a/src/main/res/raw/post_vertex_shader.glsl b/src/main/res/raw/post_vertex_shader.glsl
index 8a77002..6ceddd3 100644
--- a/src/main/res/raw/post_vertex_shader.glsl
+++ b/src/main/res/raw/post_vertex_shader.glsl
@@ -17,7 +17,7 @@
 // along with Distorted.  If not, see <http://www.gnu.org/licenses/>.                       //
 //////////////////////////////////////////////////////////////////////////////////////////////
 
-uniform vec2 u_objD;             // half of object width x half of object height.
+uniform vec2 u_objD;             // object width X object height.
                                  // point (0,0) is the center of the object
 uniform mat4 u_MVPMatrix;        // the combined model/view/projection matrix.
 
@@ -31,5 +31,5 @@ varying   vec2 v_TexCoordinate;  //
 void main()
   {
   v_TexCoordinate = a_TexCoordinate;
-  gl_Position     = u_MVPMatrix*vec4( 2.0*u_objD*a_Position, 0.0, 1.0);
+  gl_Position     = u_MVPMatrix*vec4( u_objD*a_Position, 0.0, 1.0);
   }
\ No newline at end of file
