commit 554ce72b7231e1a7aaf0af4595aa01590c6a1abc
Author: Leszek Koltunski <leszek@koltunski.pl>
Date:   Mon Dec 10 02:05:02 2018 +0000

    Bugfix: make the Inflate distances equal in all 3 dimensions regardless of dimensions of the Mesh. (still MeshFlat's Z dim needs to be corrected)

diff --git a/src/main/java/org/distorted/library/mesh/MeshCubes.java b/src/main/java/org/distorted/library/mesh/MeshCubes.java
index 29cf113..363825e 100644
--- a/src/main/java/org/distorted/library/mesh/MeshCubes.java
+++ b/src/main/java/org/distorted/library/mesh/MeshCubes.java
@@ -57,6 +57,7 @@ public class MeshCubes extends MeshBase
    private int mCols, mRows, mSlices;
    private int[][] mCubes;
    private byte[][] mInflateX, mInflateY;
+   private float mInfCorrX, mInfCorrY, mInfCorrZ;
    private ArrayList<Edge> mEdges = new ArrayList<>();
 
    private int currVert;
@@ -184,12 +185,19 @@ public class MeshCubes extends MeshBase
      mCols       =0;
      mSlices     =slices;
      numVertices =0;
-     
+
      if( cols>0 && desc.contains("1") )
        {
        mCols = cols;
        mRows = desc.length()/cols;
 
+       int max = mRows>mCols ? mRows:mCols;
+       max = mSlices>max ? mSlices : max;
+
+       mInfCorrX = (float)max/mCols;
+       mInfCorrY = (float)max/mRows;
+       mInfCorrZ = (float)max/mSlices;
+
        mCubes    = new int[mRows][mCols];
        mInflateX = new byte[mRows+1][mCols+1];
        mInflateY = new byte[mRows+1][mCols+1];
@@ -226,6 +234,13 @@ public class MeshCubes extends MeshBase
        mInflateX = new byte[mRows+1][mCols+1];
        mInflateY = new byte[mRows+1][mCols+1];
 
+       int max = mRows>mCols ? mRows:mCols;
+       max = mSlices>max ? mSlices : max;
+
+       mInfCorrX = (float)max/mCols;
+       mInfCorrY = (float)max/mRows;
+       mInfCorrZ = (float)max/mSlices;
+
        for(int col=0; col<mCols; col++)
          for(int row=0; row<mRows; row++)
            mCubes[row][col] = 1;
@@ -656,9 +671,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  ] = 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 + INF_ATTRIB  ] = mInfCorrX*mInflateX[row][col]/2.0f;
+     attribs[VERT_ATTRIBS*currVert + INF_ATTRIB+1] = mInfCorrY*mInflateY[row][col]/2.0f;
+     attribs[VERT_ATTRIBS*currVert + INF_ATTRIB+2] = mInfCorrZ*vectZ;
 
      attribs[VERT_ATTRIBS*currVert + TEX_ATTRIB  ] = x;
      attribs[VERT_ATTRIBS*currVert + TEX_ATTRIB+1] = 1.0f-y;
@@ -690,9 +705,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  ] = 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;
+                   attribs[VERT_ATTRIBS*currVert + INF_ATTRIB  ] = mInfCorrX*mInflateX[row][col]/2.0f;
+                   attribs[VERT_ATTRIBS*currVert + INF_ATTRIB+1] = mInfCorrY*mInflateY[row][col]/2.0f;
+                   attribs[VERT_ATTRIBS*currVert + INF_ATTRIB+2] = mInfCorrZ*z;
 
                    attribs[VERT_ATTRIBS*currVert + TEX_ATTRIB  ] = x;
                    attribs[VERT_ATTRIBS*currVert + TEX_ATTRIB+1] = 1.0f-(float)(row-slice)/mRows;
@@ -711,9 +726,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  ] = 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;
+                   attribs[VERT_ATTRIBS*currVert + INF_ATTRIB  ] = mInfCorrX*mInflateX[row][col]/2.0f;
+                   attribs[VERT_ATTRIBS*currVert + INF_ATTRIB+1] = mInfCorrY*mInflateY[row][col]/2.0f;
+                   attribs[VERT_ATTRIBS*currVert + INF_ATTRIB+2] = mInfCorrZ*z;
 
                    attribs[VERT_ATTRIBS*currVert + TEX_ATTRIB  ] = x;
                    attribs[VERT_ATTRIBS*currVert + TEX_ATTRIB+1] = 1.0f - (float)(row+slice)/mRows;
@@ -732,9 +747,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  ] = 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;
+                   attribs[VERT_ATTRIBS*currVert + INF_ATTRIB  ] = mInfCorrX*mInflateX[row][col]/2.0f;
+                   attribs[VERT_ATTRIBS*currVert + INF_ATTRIB+1] = mInfCorrY*mInflateY[row][col]/2.0f;
+                   attribs[VERT_ATTRIBS*currVert + INF_ATTRIB+2] = mInfCorrZ*z;
 
                    attribs[VERT_ATTRIBS*currVert + TEX_ATTRIB  ] = (float)(col-slice)/mCols;
                    attribs[VERT_ATTRIBS*currVert + TEX_ATTRIB+1] = 1.0f - y;
@@ -753,9 +768,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  ] = 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;
+                   attribs[VERT_ATTRIBS*currVert + INF_ATTRIB  ] = mInfCorrX*mInflateX[row][col]/2.0f;
+                   attribs[VERT_ATTRIBS*currVert + INF_ATTRIB+1] = mInfCorrY*mInflateY[row][col]/2.0f;
+                   attribs[VERT_ATTRIBS*currVert + INF_ATTRIB+2] = mInfCorrZ*z;
 
                    attribs[VERT_ATTRIBS*currVert + TEX_ATTRIB  ] = (float)(col+slice)/mCols;
                    attribs[VERT_ATTRIBS*currVert + TEX_ATTRIB+1] = 1.0f - y;
diff --git a/src/main/java/org/distorted/library/mesh/MeshFlat.java b/src/main/java/org/distorted/library/mesh/MeshFlat.java
index 0fb1dc6..7df473e 100644
--- a/src/main/java/org/distorted/library/mesh/MeshFlat.java
+++ b/src/main/java/org/distorted/library/mesh/MeshFlat.java
@@ -31,6 +31,7 @@ public class MeshFlat extends MeshBase
   private int mCols, mRows;
   private int remainingVert;
   private int numVertices;
+  private float mInfCorrX, mInfCorrY;
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 // Create a flat, full grid.
@@ -40,6 +41,10 @@ public class MeshFlat extends MeshBase
      mRows=rows;
      mCols=cols;
 
+     int max = mRows>mCols ? mRows:mCols;
+     mInfCorrX = (float)max/mCols;
+     mInfCorrY = (float)max/mRows;
+
      if( cols==1 && rows==1 )
        {
        numVertices = 4;
@@ -69,8 +74,12 @@ 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;
-     attribs[VERT_ATTRIBS*vertex + INF_ATTRIB+1] = 0.5f-y;
+     attribs[VERT_ATTRIBS*vertex + INF_ATTRIB  ] = (x-0.5f)*mInfCorrX;
+     attribs[VERT_ATTRIBS*vertex + INF_ATTRIB+1] = (0.5f-y)*mInfCorrY;
+
+     // TODO: this better be non-zero, so that when the GLOW gets rendered it is slightly above
+     // the original MeshFlat surface, but simply setting this to non-zero here does not work,
+     // because MeshFlat's u_objD.z is 0 and this gets multipled by it in the main vertex shader.
      attribs[VERT_ATTRIBS*vertex + INF_ATTRIB+2] = 0.0f;
 
      attribs[VERT_ATTRIBS*vertex + TEX_ATTRIB  ] = x;
