commit a1b36fc83c2f88a56ef242f2a9de5a547be33cff
Author: leszek <leszek@koltunski.pl>
Date:   Thu Mar 16 22:10:54 2017 +0000

    Simplify BLUR shader.

diff --git a/src/main/java/org/distorted/library/EffectQueuePostprocess.java b/src/main/java/org/distorted/library/EffectQueuePostprocess.java
index 2074bdf..7706ab5 100644
--- a/src/main/java/org/distorted/library/EffectQueuePostprocess.java
+++ b/src/main/java/org/distorted/library/EffectQueuePostprocess.java
@@ -21,7 +21,6 @@ package org.distorted.library;
 
 import android.content.res.Resources;
 import android.opengl.GLES30;
-import android.opengl.Matrix;
 
 import org.distorted.library.message.EffectMessage;
 import org.distorted.library.program.DistortedProgram;
@@ -72,9 +71,6 @@ class EffectQueuePostprocess extends EffectQueue
   private static DistortedFramebuffer mPostBuffer = new DistortedFramebuffer(true,DistortedSurface.TYPE_SYST,1,1);
                  DistortedFramebuffer mMainBuffer = new DistortedFramebuffer(true,DistortedSurface.TYPE_SYST,1,1);
 
-  private static float[] mMVPMatrix = new float[16];
-  private static float[] mTmpMatrix = new float[16];
-
   // BLUR effect
   private static final float GAUSSIAN[] =   // G(0.00), G(0.03), G(0.06), ..., G(3.00), 0
     {                                       // where G(x)= (1/(sqrt(2*PI))) * e^(-(x^2)/2). The last 0 terminates.
@@ -103,7 +99,7 @@ class EffectQueuePostprocess extends EffectQueue
   private static float[] offsetsCache = new float[MAX_BLUR + MAX_BLUR*MAX_BLUR/4];
 
   private static DistortedProgram mBlurProgram;
-  private static int mRadiusH,mOffsetsH,mWeightsH,mObjDH,mMVPMatrixH;
+  private static int mRadiusH,mOffsetsH,mWeightsH,mDepthH;
   private static float[] mWeights = new float[MAX_BLUR];
   private static float[] mOffsets = new float[MAX_BLUR];
   // another effect ....
@@ -131,8 +127,7 @@ class EffectQueuePostprocess extends EffectQueue
     mRadiusH    = GLES30.glGetUniformLocation( blurProgramH, "u_Radius");
     mOffsetsH   = GLES30.glGetUniformLocation( blurProgramH, "u_Offsets");
     mWeightsH   = GLES30.glGetUniformLocation( blurProgramH, "u_Weights");
-    mObjDH      = GLES30.glGetUniformLocation( blurProgramH, "u_objD");
-    mMVPMatrixH = GLES30.glGetUniformLocation( blurProgramH, "u_MVPMatrix");
+    mDepthH     = GLES30.glGetUniformLocation( blurProgramH, "u_Depth");
     }
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
@@ -235,16 +230,9 @@ class EffectQueuePostprocess extends EffectQueue
     if( mNumEffects>0 && compute(time) )
       {
       mMainBuffer.setAsInput();
-
-      Matrix.setIdentityM(mTmpMatrix, 0);
-      Matrix.translateM(mTmpMatrix, 0, 0, 0, -surface.mDistance);
-      Matrix.multiplyMM(mMVPMatrix, 0, surface.mProjectionMatrix, 0, mTmpMatrix, 0);
-
       float w = surface.mWidth;
       float h = surface.mHeight;
 
-      mBlurProgram.useProgram();
-
       int radius = (int)mUniforms[0];
       if( radius>=MAX_BLUR ) radius = MAX_BLUR-1;
       computeGaussianKernel(radius);
@@ -253,21 +241,17 @@ class EffectQueuePostprocess extends EffectQueue
       radius = (radius+1)/2;
       for(int i=0; i<=radius; i++) mOffsets[i] = offsetsCache[offset+i]/h;
 
-      GLES30.glUniform1fv( mWeightsH, radius+1, weightsCache,offset);
-      GLES30.glUniform1i( mRadiusH, radius);
-      GLES30.glUniform2f( mObjDH , w, h );
-
       mPostBuffer.resizeFast( (int)w, (int)h);
       mPostBuffer.setAsOutput(time);
       GLES30.glViewport(0, 0, (int)w, (int)h);
 
-      Matrix.setIdentityM(mTmpMatrix, 0);
-      Matrix.translateM(mTmpMatrix, 0, 0, 0, -mPostBuffer.mDistance);
-      Matrix.multiplyMM(mMVPMatrix, 0, mPostBuffer.mProjectionMatrix, 0, mTmpMatrix, 0);
+      mBlurProgram.useProgram();
+      GLES30.glUniform1fv( mWeightsH, radius+1, weightsCache,offset);
+      GLES30.glUniform1i( mRadiusH, radius);
+      GLES30.glUniform1f( mDepthH , 1.0f-surface.mNear);
 
       // horizontal blur
       GLES30.glUniform1fv( mOffsetsH ,radius+1, mOffsets,0);
-      GLES30.glUniformMatrix4fv(mMVPMatrixH, 1, false, mMVPMatrix , 0);
       GLES30.glVertexAttribPointer(mBlurProgram.mAttribute[0], POS_DATA_SIZE, GLES30.GL_FLOAT, false, 0, mQuadPositions);
       GLES30.glVertexAttribPointer(mBlurProgram.mAttribute[1], TEX_DATA_SIZE, GLES30.GL_FLOAT, false, 0, mQuadTextureInv);
       GLES30.glDrawArrays(GLES30.GL_TRIANGLE_STRIP, 0, 4);
diff --git a/src/main/res/raw/blit_fragment_shader.glsl b/src/main/res/raw/blit_fragment_shader.glsl
index aec3028..b0de9cd 100644
--- a/src/main/res/raw/blit_fragment_shader.glsl
+++ b/src/main/res/raw/blit_fragment_shader.glsl
@@ -18,9 +18,9 @@
 //////////////////////////////////////////////////////////////////////////////////////////////
 
 precision lowp float;
-  
-uniform sampler2D u_Texture;  // The input texture.
+
 varying vec2 v_TexCoordinate; // Interpolated texture coordinate per fragment.
+uniform sampler2D u_Texture;  // The input texture.
 
 //////////////////////////////////////////////////////////////////////////////////////////////
 
diff --git a/src/main/res/raw/blur_vertex_shader.glsl b/src/main/res/raw/blur_vertex_shader.glsl
index 8aa39a6..1f5c7be 100644
--- a/src/main/res/raw/blur_vertex_shader.glsl
+++ b/src/main/res/raw/blur_vertex_shader.glsl
@@ -19,18 +19,15 @@
 
 precision lowp float;
 
-uniform vec2 u_objD;             // object width X object height.
-uniform mat4 u_MVPMatrix;        // the combined model/view/projection matrix.
-
-attribute vec2 a_Position;       // Per-vertex position information we will pass in.
+uniform float u_Depth;           // distance from the near plane to render plane, in clip coords
+attribute vec2 a_Position;       // Per-vertex position.
 attribute vec2 a_TexCoordinate;  // Per-vertex texture coordinate information we will pass in.
-varying   vec2 v_TexCoordinate;  //
+varying vec2 v_TexCoordinate;    //
 
 //////////////////////////////////////////////////////////////////////////////////////////////
-// empty 2D vertex shader for postprocessing
 
 void main()
   {
   v_TexCoordinate = a_TexCoordinate;
-  gl_Position     = u_MVPMatrix*vec4( u_objD*a_Position, 0.0, 1.0);
+  gl_Position     = vec4(2.0*a_Position,u_Depth,1.0);
   }
\ No newline at end of file
