commit bed13beafe46c1b3c3c35c62d18b83c3d41dc48e
Author: leszek <leszek@koltunski.pl>
Date:   Thu Jun 29 21:27:52 2017 +0100

    Progress with Glow.

diff --git a/src/main/java/org/distorted/library/effect/PostprocessEffect.java b/src/main/java/org/distorted/library/effect/PostprocessEffect.java
index 2a9dc90..bfcda78 100644
--- a/src/main/java/org/distorted/library/effect/PostprocessEffect.java
+++ b/src/main/java/org/distorted/library/effect/PostprocessEffect.java
@@ -139,7 +139,7 @@ public abstract class PostprocessEffect extends Effect implements DistortedMaste
  *
  * @y.exclude
  */
-  public abstract int apply(float[] uniforms, int index, int quality, DistortedFramebuffer[] buffers);
+  public abstract int apply(float[] uniforms, int index, DistortedFramebuffer[] buffers);
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 /**
diff --git a/src/main/java/org/distorted/library/effect/PostprocessEffectBlur.java b/src/main/java/org/distorted/library/effect/PostprocessEffectBlur.java
index 2edde1f..b161541 100644
--- a/src/main/java/org/distorted/library/effect/PostprocessEffectBlur.java
+++ b/src/main/java/org/distorted/library/effect/PostprocessEffectBlur.java
@@ -138,7 +138,7 @@ public class PostprocessEffectBlur extends PostprocessEffect
  *
  * @y.exclude
  */
-  public int apply(float[] uniforms, int index, int quality, DistortedFramebuffer[] buffers)
+  public int apply(float[] uniforms, int index, DistortedFramebuffer[] buffers)
     {
     if( mProgram1 ==null)
       {
@@ -146,7 +146,7 @@ public class PostprocessEffectBlur extends PostprocessEffect
       mProgram2 = mPrograms.get(mIndex2);
       }
 
-    DistortedFramebuffer buffer = buffers[quality];
+    DistortedFramebuffer buffer = buffers[mQualityLevel];
 
     buffer.setAsOutput();
 
@@ -198,7 +198,7 @@ public class PostprocessEffectBlur extends PostprocessEffect
     GLES30.glVertexAttribPointer(mProgram2.mAttribute[1], TEX_DATA_SIZE, GLES30.GL_FLOAT, false, 0, mQuadTexture);
     GLES30.glDrawArrays(GLES30.GL_TRIANGLE_STRIP, 0, 4);
 
-    return quality;
+    return 2;
     }
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
diff --git a/src/main/java/org/distorted/library/effect/PostprocessEffectGlow.java b/src/main/java/org/distorted/library/effect/PostprocessEffectGlow.java
index dd2d9f8..aa8a93d 100644
--- a/src/main/java/org/distorted/library/effect/PostprocessEffectGlow.java
+++ b/src/main/java/org/distorted/library/effect/PostprocessEffectGlow.java
@@ -141,7 +141,7 @@ public class PostprocessEffectGlow extends PostprocessEffect
  *
  * @y.exclude
  */
-  public int apply(float[] uniforms, int index, int quality, DistortedFramebuffer[] buffers)
+  public int apply(float[] uniforms, int index, DistortedFramebuffer[] buffers)
     {
     if( mProgram1 ==null)
       {
@@ -149,12 +149,8 @@ public class PostprocessEffectGlow extends PostprocessEffect
       mProgram2 = mPrograms.get(mIndex2);
       }
 
-    int outQuality = (quality<mQualityLevel ? mQualityLevel:quality);
-
-    DistortedFramebuffer  inBuffer = buffers[quality];
-    DistortedFramebuffer outBuffer = buffers[outQuality];
-
-    outBuffer.setAsOutput();
+    DistortedFramebuffer  inBuffer = buffers[0];
+    DistortedFramebuffer outBuffer = buffers[mQualityLevel];
 
     float w1  = outBuffer.getWidth();
     float h1  = outBuffer.getHeight();
@@ -172,6 +168,7 @@ public class PostprocessEffectGlow extends PostprocessEffect
     for(int i=0; i<=radius; i++) mOffsets[i] = offsetsCache[offset+i]/w1;
 
     mProgram1.useProgram();
+    outBuffer.setAsOutput();
     outBuffer.bindForOutput(1);
     inBuffer.setAsInput(0);
 
@@ -189,13 +186,10 @@ public class PostprocessEffectGlow extends PostprocessEffect
     for(int i=0; i<=radius; i++) mOffsets[i] = offsetsCache[offset+i]/h1;
 
     mProgram2.useProgram();
-    outBuffer.bindForOutput(0);
+    inBuffer.setAsOutput();
+    inBuffer.bindForOutput(0);
     outBuffer.setAsInput(1);
-/*
-GLES30.glColorMask(true,true,true,true);
-GLES30.glClearColor(0.0f,0.0f,0.0f,0.0f);
-GLES30.glClear(GLES30.GL_COLOR_BUFFER_BIT);
-*/
+
     GLES30.glUniform1f ( mProgram2.mUniform[0] , near);
     GLES30.glUniform1i ( mProgram2.mUniform[1] , 0 );
     GLES30.glUniform1fv( mProgram2.mUniform[2] , radius+1, mOffsets,0);
@@ -206,7 +200,7 @@ GLES30.glClear(GLES30.GL_COLOR_BUFFER_BIT);
     GLES30.glVertexAttribPointer(mProgram2.mAttribute[1], TEX_DATA_SIZE, GLES30.GL_FLOAT, false, 0, mQuadTexture);
     GLES30.glDrawArrays(GLES30.GL_TRIANGLE_STRIP, 0, 4);
 
-    return outQuality;
+    return 2;
     }
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
@@ -253,7 +247,7 @@ GLES30.glClear(GLES30.GL_COLOR_BUFFER_BIT);
       "    pixel += ( texture(u_ColorTexture,vec2(v_TexCoord.x+u_Offsets[i],v_TexCoord.y)) +                 \n"+
       "               texture(u_ColorTexture,vec2(v_TexCoord.x-u_Offsets[i],v_TexCoord.y)) ) * u_Weights[i]; \n"+
       "    }                                                                                                 \n"+
-      "  fragColor = vec4( 0.5*(pixel.rgb+u_Color.rgb), sign(pixel.a)*u_Color.a);                            \n"+
+      "  fragColor = vec4( 0.5*(pixel.rgb+u_Color.rgb), sqrt(pixel.a*u_Color.a));                            \n"+
       "  }";
 
     final String glowFragment2 =
@@ -277,7 +271,7 @@ GLES30.glClear(GLES30.GL_COLOR_BUFFER_BIT);
       "    pixel += ( texture(u_ColorTexture,vec2(v_TexCoord.x,v_TexCoord.y+u_Offsets[i])) +                 \n"+
       "               texture(u_ColorTexture,vec2(v_TexCoord.x,v_TexCoord.y-u_Offsets[i])) ) * u_Weights[i]; \n"+
       "    }                                                                                                 \n"+
-      "  fragColor = vec4( 0.5*(pixel.rgb+u_Color.rgb), sign(pixel.a)*u_Color.a);                            \n"+
+      "  fragColor = vec4( 0.5*(pixel.rgb+u_Color.rgb), sqrt(pixel.a*u_Color.a));                            \n"+
       "  }";
 
     mIndex1 = PostprocessEffect.register("GLOW1", glowVertex,glowFragment1);
diff --git a/src/main/java/org/distorted/library/main/DistortedEffects.java b/src/main/java/org/distorted/library/main/DistortedEffects.java
index 9d450d1..f6fee45 100644
--- a/src/main/java/org/distorted/library/main/DistortedEffects.java
+++ b/src/main/java/org/distorted/library/main/DistortedEffects.java
@@ -231,9 +231,9 @@ public class DistortedEffects
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
-  int postprocess(DistortedOutputSurface surface,int quality)
+  int postprocess(DistortedOutputSurface surface)
     {
-    return mP.postprocess(surface,quality);
+    return mP.postprocess(surface);
     }
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
diff --git a/src/main/java/org/distorted/library/main/DistortedOutputSurface.java b/src/main/java/org/distorted/library/main/DistortedOutputSurface.java
index 560b809..83c7d9e 100644
--- a/src/main/java/org/distorted/library/main/DistortedOutputSurface.java
+++ b/src/main/java/org/distorted/library/main/DistortedOutputSurface.java
@@ -251,7 +251,7 @@ private String sLast="", sCurr="";
 
   int renderChildren(long time, int numChildren, ArrayList<DistortedNode> children)
     {
-    int inQuality=0, outQuality, numRenders = 0, bucketChange = 0;
+    int quality=0, numRenders = 0, bucketChange = 0;
     DistortedNode child1, child2;
     DistortedEffects lastEffects=null, currEffects;
     long lastBucket=0, currBucket;
@@ -278,31 +278,29 @@ sCurr += (" "+currBucket);
             for(int j=bucketChange; j<i; j++)
               {
               child2 = children.get(j);
-              numRenders += child2.markStencilAndDepth(time,mBuffer[inQuality],lastEffects);
+              numRenders += child2.markStencilAndDepth(time,mBuffer[quality],lastEffects);
               }
 
-            outQuality  = lastEffects.postprocess(this,inQuality);
-            numRenders += lastEffects.getNumRenders();
-            numRenders += blitWithDepth(time, mBuffer[outQuality]);
+            numRenders += lastEffects.postprocess(this);
+            numRenders += blitWithDepth(time, mBuffer[quality]);
             }
 
-          inQuality = currEffects.getQuality();
+          quality = currEffects.getQuality();
           bucketChange = i;
           }
 
-        numRenders += child1.draw(time,mBuffer[inQuality]);
+        numRenders += child1.draw(time,mBuffer[quality]);
 
         if( i==numChildren-1 )
           {
           for(int j=bucketChange; j<numChildren; j++)
             {
             child2 = children.get(j);
-            numRenders += child2.markStencilAndDepth(time,mBuffer[inQuality],currEffects);
+            numRenders += child2.markStencilAndDepth(time,mBuffer[quality],currEffects);
             }
 
-          outQuality  = currEffects.postprocess(this,inQuality);
-          numRenders += currEffects.getNumRenders();
-          numRenders += blitWithDepth(time, mBuffer[outQuality]);
+          numRenders += currEffects.postprocess(this);
+          numRenders += blitWithDepth(time, mBuffer[quality]);
           }
         }
 
diff --git a/src/main/java/org/distorted/library/main/EffectQueueMatrix.java b/src/main/java/org/distorted/library/main/EffectQueueMatrix.java
index 5f1776d..0bf7d4d 100644
--- a/src/main/java/org/distorted/library/main/EffectQueueMatrix.java
+++ b/src/main/java/org/distorted/library/main/EffectQueueMatrix.java
@@ -46,7 +46,7 @@ class EffectQueueMatrix extends EffectQueue
   private static int mObjDH;      // This is a handle to half a Object dimensions
   private static int mMVPMatrixH; // the transformation matrix
   private static int mMVMatrixH;  // the modelview matrix.
-  
+
 ///////////////////////////////////////////////////////////////////////////////////////////////////
    
   EffectQueueMatrix(long id)
@@ -70,7 +70,7 @@ class EffectQueueMatrix extends EffectQueue
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 // modify the ModelView matrix so that the object drawn appears to be (about) 'marginInPixels' pixels
-// larger in each direction when rendered. Used in BLUR.
+// larger in each direction when rendered. Used in Postprocessing.
 
   private void magnify(DistortedOutputSurface projection, float halfX, float halfY, float halfZ, float marginInPixels)
     {
@@ -94,9 +94,7 @@ class EffectQueueMatrix extends EffectQueue
 
     float xlen = projection.mWidth *(mMaxx-mMinx)/2;
     float ylen = projection.mHeight*(mMaxy-mMiny)/2;
-    float scale = 1.0f + marginInPixels/( xlen>ylen ? ylen:xlen );
-
-    android.util.Log.d("scale", ""+marginInPixels+" scale= "+scale+" xlen="+xlen+" ylen="+ylen+" meshW="+(2*halfX)+" meshY="+(2*halfY));
+    float scale = 1.0f + 2*marginInPixels/( xlen>ylen ? ylen:xlen );
 
     Matrix.scaleM(mViewMatrix, 0, scale, scale, scale);
     }
diff --git a/src/main/java/org/distorted/library/main/EffectQueuePostprocess.java b/src/main/java/org/distorted/library/main/EffectQueuePostprocess.java
index 3d97485..a9ea93d 100644
--- a/src/main/java/org/distorted/library/main/EffectQueuePostprocess.java
+++ b/src/main/java/org/distorted/library/main/EffectQueuePostprocess.java
@@ -101,17 +101,19 @@ class EffectQueuePostprocess extends EffectQueue
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
-  int postprocess(DistortedOutputSurface surface, int quality)
+  int postprocess(DistortedOutputSurface surface)
     {
+    int numRenders = 0;
+
     DistortedRenderState.useStencilMark();
 
     for(int i=0; i<mNumEffects; i++)
       {
-      quality = ((PostprocessEffect)mEffects[i]).apply(mUniforms,NUM_UNIFORMS*i, quality, surface.mBuffer);
+      numRenders += ((PostprocessEffect)mEffects[i]).apply(mUniforms,NUM_UNIFORMS*i, surface.mBuffer);
       }
 
     DistortedRenderState.unuseStencilMark();
 
-    return quality;
+    return numRenders;
     }
   }
