commit e71dd7fb158522521900e69b15c52830810af82e
Author: Leszek Koltunski <leszek@koltunski.pl>
Date:   Tue Dec 11 13:04:59 2018 +0000

    Improve computation of the thickness of the postprocessing halo - should be independent of the size of underlying object now.
    Still it is not completely ok, it appears to depend on the ModelView matrix (use the Effects3D app to rotate the object around Z-axis to see this)

diff --git a/src/main/java/org/distorted/library/effect/PostprocessEffectGlow.java b/src/main/java/org/distorted/library/effect/PostprocessEffectGlow.java
index fa719a6..dedc039 100644
--- a/src/main/java/org/distorted/library/effect/PostprocessEffectGlow.java
+++ b/src/main/java/org/distorted/library/effect/PostprocessEffectGlow.java
@@ -171,9 +171,6 @@ public class PostprocessEffectGlow extends PostprocessEffect
     float offsetCorrW = corrW/w;
     float offsetCorrH = corrH/h;
 
-    // try tracking the bug when sometimes the size of the GLOW overlay is wrong
-    android.util.Log.e("glow", "w="+w+" h="+h+" corrW="+corrW+" corrH="+corrH);
-
     int radius = (int)(uniforms[index]*mQualityScale);
     if( radius>=MAX_HALO ) radius = MAX_HALO-1;
     computeGaussianKernel(radius);
diff --git a/src/main/java/org/distorted/library/mesh/MeshCubes.java b/src/main/java/org/distorted/library/mesh/MeshCubes.java
index 130980f..0bf90ac 100644
--- a/src/main/java/org/distorted/library/mesh/MeshCubes.java
+++ b/src/main/java/org/distorted/library/mesh/MeshCubes.java
@@ -57,7 +57,6 @@ public class MeshCubes extends MeshBase
    private int mCols, mRows, mSlices;
    private int[][] mCubes;
    private byte[][] mInflateX, mInflateY;
-   private float mInfCorr;
    private ArrayList<Edge> mEdges = new ArrayList<>();
 
    private int currVert;
@@ -191,9 +190,6 @@ public class MeshCubes extends MeshBase
        mCols = cols;
        mRows = desc.length()/cols;
 
-       mInfCorr = mRows>mCols ? mRows:mCols;
-       mInfCorr = mSlices>mInfCorr ? mSlices : mInfCorr;
-
        mCubes    = new int[mRows][mCols];
        mInflateX = new byte[mRows+1][mCols+1];
        mInflateY = new byte[mRows+1][mCols+1];
@@ -230,9 +226,6 @@ public class MeshCubes extends MeshBase
        mInflateX = new byte[mRows+1][mCols+1];
        mInflateY = new byte[mRows+1][mCols+1];
 
-       mInfCorr = mRows>mCols ? mRows:mCols;
-       mInfCorr = mSlices>mInfCorr ? mSlices : mInfCorr;
-
        for(int col=0; col<mCols; col++)
          for(int row=0; row<mRows; row++)
            mCubes[row][col] = 1;
@@ -663,9 +656,9 @@ public class MeshCubes extends MeshBase
      attribs[VERT_ATTRIBS*currVert + NOR_ATTRIB+1] = mNormalY[index];
      attribs[VERT_ATTRIBS*currVert + NOR_ATTRIB+2] = mNormalZ[index];
 
-     attribs[VERT_ATTRIBS*currVert + INF_ATTRIB  ] = mInfCorr*mInflateX[row][col]/2.0f;
-     attribs[VERT_ATTRIBS*currVert + INF_ATTRIB+1] = mInfCorr*mInflateY[row][col]/2.0f;
-     attribs[VERT_ATTRIBS*currVert + INF_ATTRIB+2] = mInfCorr*vectZ;
+     attribs[VERT_ATTRIBS*currVert + INF_ATTRIB  ] = mInflateX[row][col]/2.0f;
+     attribs[VERT_ATTRIBS*currVert + INF_ATTRIB+1] = mInflateY[row][col]/2.0f;
+     attribs[VERT_ATTRIBS*currVert + INF_ATTRIB+2] = vectZ;
 
      attribs[VERT_ATTRIBS*currVert + TEX_ATTRIB  ] = x;
      attribs[VERT_ATTRIBS*currVert + TEX_ATTRIB+1] = 1.0f-y;
@@ -697,9 +690,9 @@ public class MeshCubes extends MeshBase
                    attribs[VERT_ATTRIBS*currVert + NOR_ATTRIB+1] = 1.0f;
                    attribs[VERT_ATTRIBS*currVert + NOR_ATTRIB+2] = (slice==0 ? R : (slice==mSlices ? -R:0) );
 
-                   attribs[VERT_ATTRIBS*currVert + INF_ATTRIB  ] = mInfCorr*mInflateX[row][col]/2.0f;
-                   attribs[VERT_ATTRIBS*currVert + INF_ATTRIB+1] = mInfCorr*mInflateY[row][col]/2.0f;
-                   attribs[VERT_ATTRIBS*currVert + INF_ATTRIB+2] = mInfCorr*z;
+                   attribs[VERT_ATTRIBS*currVert + INF_ATTRIB  ] = mInflateX[row][col]/2.0f;
+                   attribs[VERT_ATTRIBS*currVert + INF_ATTRIB+1] = mInflateY[row][col]/2.0f;
+                   attribs[VERT_ATTRIBS*currVert + INF_ATTRIB+2] = z;
 
                    texY = (mRows-row+slice)%(2*mRows);
                    if( texY>mRows ) texY = 2*mRows-texY;
@@ -722,9 +715,9 @@ public class MeshCubes extends MeshBase
                    attribs[VERT_ATTRIBS*currVert + NOR_ATTRIB+1] =-1.0f;
                    attribs[VERT_ATTRIBS*currVert + NOR_ATTRIB+2] = (slice==0 ? R : (slice==mSlices ? -R:0) );
 
-                   attribs[VERT_ATTRIBS*currVert + INF_ATTRIB  ] = mInfCorr*mInflateX[row][col]/2.0f;
-                   attribs[VERT_ATTRIBS*currVert + INF_ATTRIB+1] = mInfCorr*mInflateY[row][col]/2.0f;
-                   attribs[VERT_ATTRIBS*currVert + INF_ATTRIB+2] = mInfCorr*z;
+                   attribs[VERT_ATTRIBS*currVert + INF_ATTRIB  ] = mInflateX[row][col]/2.0f;
+                   attribs[VERT_ATTRIBS*currVert + INF_ATTRIB+1] = mInflateY[row][col]/2.0f;
+                   attribs[VERT_ATTRIBS*currVert + INF_ATTRIB+2] = z;
 
                    texY = (mRows-row+slice)%(2*mRows);
                    if( texY>mRows ) texY = 2*mRows-texY;
@@ -747,9 +740,9 @@ public class MeshCubes extends MeshBase
                    attribs[VERT_ATTRIBS*currVert + NOR_ATTRIB+1] = side==WEST ? 0.0f : (side==NORTH?-R:R);
                    attribs[VERT_ATTRIBS*currVert + NOR_ATTRIB+2] = (slice==0 ? R : (slice==mSlices ? -R:0) );
 
-                   attribs[VERT_ATTRIBS*currVert + INF_ATTRIB  ] = mInfCorr*mInflateX[row][col]/2.0f;
-                   attribs[VERT_ATTRIBS*currVert + INF_ATTRIB+1] = mInfCorr*mInflateY[row][col]/2.0f;
-                   attribs[VERT_ATTRIBS*currVert + INF_ATTRIB+2] = mInfCorr*z;
+                   attribs[VERT_ATTRIBS*currVert + INF_ATTRIB  ] = mInflateX[row][col]/2.0f;
+                   attribs[VERT_ATTRIBS*currVert + INF_ATTRIB+1] = mInflateY[row][col]/2.0f;
+                   attribs[VERT_ATTRIBS*currVert + INF_ATTRIB+2] = z;
 
                    texX = (col+slice)%(2*mCols);
                    if( texX>mCols ) texX = 2*mCols-texX;
@@ -772,9 +765,9 @@ public class MeshCubes extends MeshBase
                    attribs[VERT_ATTRIBS*currVert + NOR_ATTRIB+1] = side==EAST ? 0.0f : (side==SOUTH?-R:R);
                    attribs[VERT_ATTRIBS*currVert + NOR_ATTRIB+2] = (slice==0 ? R : (slice==mSlices ? -R:0) );
 
-                   attribs[VERT_ATTRIBS*currVert + INF_ATTRIB  ] = mInfCorr*mInflateX[row][col]/2.0f;
-                   attribs[VERT_ATTRIBS*currVert + INF_ATTRIB+1] = mInfCorr*mInflateY[row][col]/2.0f;
-                   attribs[VERT_ATTRIBS*currVert + INF_ATTRIB+2] = mInfCorr*z;
+                   attribs[VERT_ATTRIBS*currVert + INF_ATTRIB  ] = mInflateX[row][col]/2.0f;
+                   attribs[VERT_ATTRIBS*currVert + INF_ATTRIB+1] = mInflateY[row][col]/2.0f;
+                   attribs[VERT_ATTRIBS*currVert + INF_ATTRIB+2] = z;
 
                    texX = (col+slice)%(2*mCols);
                    if( texX>mCols ) texX = 2*mCols-texX;
diff --git a/src/main/java/org/distorted/library/mesh/MeshFlat.java b/src/main/java/org/distorted/library/mesh/MeshFlat.java
index c7d18c4..22b0e4a 100644
--- a/src/main/java/org/distorted/library/mesh/MeshFlat.java
+++ b/src/main/java/org/distorted/library/mesh/MeshFlat.java
@@ -31,7 +31,6 @@ public class MeshFlat extends MeshBase
   private int mCols, mRows;
   private int remainingVert;
   private int numVertices;
-  private float mInfCorr;
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 // Create a flat, full grid.
@@ -41,8 +40,6 @@ public class MeshFlat extends MeshBase
      mRows=rows;
      mCols=cols;
 
-     mInfCorr = mRows>mCols ? mRows:mCols;
-
      if( cols==1 && rows==1 )
        {
        numVertices = 4;
@@ -72,9 +69,9 @@ public class MeshFlat extends MeshBase
      attribs[VERT_ATTRIBS*vertex + NOR_ATTRIB+1] = 0.0f;
      attribs[VERT_ATTRIBS*vertex + NOR_ATTRIB+2] = 1.0f;
 
-     attribs[VERT_ATTRIBS*vertex + INF_ATTRIB  ] = (x-0.5f)*mInfCorr;
-     attribs[VERT_ATTRIBS*vertex + INF_ATTRIB+1] = (0.5f-y)*mInfCorr;
-     attribs[VERT_ATTRIBS*vertex + INF_ATTRIB+2] = 0.01f   *mInfCorr;  // Inflated surface needs to be slightly in front
+     attribs[VERT_ATTRIBS*vertex + INF_ATTRIB  ] = (x-0.5f);
+     attribs[VERT_ATTRIBS*vertex + INF_ATTRIB+1] = (0.5f-y);
+     attribs[VERT_ATTRIBS*vertex + INF_ATTRIB+2] = 0.01f   ;  // Inflated surface needs to be slightly in front
 
      attribs[VERT_ATTRIBS*vertex + TEX_ATTRIB  ] = x;
      attribs[VERT_ATTRIBS*vertex + TEX_ATTRIB+1] = 1.0f-y;
diff --git a/src/main/res/raw/main_vertex_shader.glsl b/src/main/res/raw/main_vertex_shader.glsl
index 3b7cbc1..fe6a09b 100644
--- a/src/main/res/raw/main_vertex_shader.glsl
+++ b/src/main/res/raw/main_vertex_shader.glsl
@@ -145,9 +145,11 @@ float degree(in vec4 region, in vec2 S, in vec2 PS)
 
 void main()
   {
-  vec3 v = 2.0*u_objD*a_Position + u_Inflate*a_Inflate;
+  vec3 v = 2.0*u_objD*a_Position;
   vec3 n = a_Normal;
 
+  v += (u_objD.x+u_objD.y)*u_Inflate*a_Inflate;
+
 #if NUM_VERTEX>0
   int effect=0;
 
