commit 7e53a35f71a062e3e11facb05d5021687c67552a
Author: Leszek Koltunski <leszek@koltunski.pl>
Date:   Sun Apr 5 19:39:34 2020 +0100

    Bugfixes in MeshBase:
    
    1) improper buffer was being invalidated after apply and setTextureMap (TFO rather than VBO!)
    2) setTextureMap would only work if all components were being set

diff --git a/src/main/java/org/distorted/library/main/InternalBuffer.java b/src/main/java/org/distorted/library/main/InternalBuffer.java
index 63b12e1..2cc820d 100644
--- a/src/main/java/org/distorted/library/main/InternalBuffer.java
+++ b/src/main/java/org/distorted/library/main/InternalBuffer.java
@@ -36,8 +36,7 @@ import java.nio.FloatBuffer;
  */
 public class InternalBuffer extends InternalObject
   {
-  public final int[] mIndex;
-
+  private final int[] mIndex;
   private int mTarget, mSize, mUsage;
   private Buffer mBuffer;
 
@@ -56,10 +55,17 @@ public class InternalBuffer extends InternalObject
     recreate();
     }
 
+///////////////////////////////////////////////////////////////////////////////////////////////////
+
+  public int getIndex()
+    {
+    return mIndex[0];
+    }
+
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 // must be called from a thread holding OpenGL Context.
 
-  public void createImmediately(int size, float[] buffer)
+  public int createImmediately(int size, float[] buffer)
     {
     if( mIndex[0]<0 )
       {
@@ -83,6 +89,8 @@ public class InternalBuffer extends InternalObject
 
       markWasCreatedImmediately();
       }
+
+    return mIndex[0];
     }
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
diff --git a/src/main/java/org/distorted/library/mesh/MeshBase.java b/src/main/java/org/distorted/library/mesh/MeshBase.java
index 1a8ad1e..c789910 100644
--- a/src/main/java/org/distorted/library/mesh/MeshBase.java
+++ b/src/main/java/org/distorted/library/mesh/MeshBase.java
@@ -69,7 +69,7 @@ public abstract class MeshBase
    private float mBoundingX, mBoundingY, mBoundingZ;
    private float mStretchX, mStretchY, mStretchZ;
 
-   private class Component
+   private static class Component
      {
      private int mEndIndex;
      private Static4D mTextureMap;
@@ -284,7 +284,7 @@ public abstract class MeshBase
  */
    public int getTFO()
      {
-     return mTFO.mIndex[0];
+     return mTFO.getIndex();
      }
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
@@ -306,9 +306,9 @@ public abstract class MeshBase
  */
    public void bindVertexAttribs(DistortedProgram program)
      {
-     mVBO.createImmediately(mNumVertices*VERT_SIZE, mVertAttribs);
+     int index = mVBO.createImmediately(mNumVertices*VERT_SIZE, mVertAttribs);
 
-     GLES31.glBindBuffer(GLES31.GL_ARRAY_BUFFER, mVBO.mIndex[0] );
+     GLES31.glBindBuffer(GLES31.GL_ARRAY_BUFFER, index );
      GLES31.glVertexAttribPointer(program.mAttribute[0], POS_DATA_SIZE, GLES31.GL_FLOAT, false, VERT_SIZE, OFFSET_POS);
      GLES31.glVertexAttribPointer(program.mAttribute[1], NOR_DATA_SIZE, GLES31.GL_FLOAT, false, VERT_SIZE, OFFSET_NOR);
      GLES31.glVertexAttribPointer(program.mAttribute[2], INF_DATA_SIZE, GLES31.GL_FLOAT, false, VERT_SIZE, OFFSET_INF);
@@ -324,9 +324,9 @@ public abstract class MeshBase
  */
    public void bindTransformAttribs(DistortedProgram program)
      {
-     mTFO.createImmediately(mNumVertices*TRAN_SIZE, null);
+     int index = mTFO.createImmediately(mNumVertices*TRAN_SIZE, null);
 
-     GLES31.glBindBuffer(GLES31.GL_ARRAY_BUFFER, mTFO.mIndex[0] );
+     GLES31.glBindBuffer(GLES31.GL_ARRAY_BUFFER, index );
      GLES31.glVertexAttribPointer(program.mAttribute[0], POS_DATA_SIZE, GLES31.GL_FLOAT, false, 0, 0);
      GLES31.glBindBuffer(GLES31.GL_ARRAY_BUFFER, 0);
      }
@@ -453,7 +453,7 @@ public abstract class MeshBase
          }
        }
 
-     mTFO.invalidate();
+     mVBO.invalidate();
      }
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
@@ -482,7 +482,6 @@ public abstract class MeshBase
      int num_maps = maps.length;
      int min = Math.min(num_comp, num_maps);
      int vertex = 0;
-     int index  = TEX_ATTRIB;
      Static4D newMap, oldMap;
      Component comp;
      float newW, newH, ratW, ratH, movX, movY;
@@ -490,6 +489,7 @@ public abstract class MeshBase
      for(int i=0; i<min; i++)
        {
        newMap = maps[i];
+       comp = mComponent.get(i);
 
        if( newMap!=null )
          {
@@ -498,14 +498,13 @@ public abstract class MeshBase
 
          if( newW!=0.0f && newH!=0.0f )
            {
-           comp = mComponent.get(i);
            oldMap = comp.mTextureMap;
            ratW = newW/oldMap.get2();
            ratH = newH/oldMap.get3();
            movX = newMap.get0() - ratW*oldMap.get0();
            movY = newMap.get1() - ratH*oldMap.get1();
 
-           for( ; vertex<=comp.mEndIndex; vertex++, index+=VERT_ATTRIBS)
+           for( int index=vertex*VERT_ATTRIBS+TEX_ATTRIB ; vertex<=comp.mEndIndex; vertex++, index+=VERT_ATTRIBS)
              {
              mVertAttribs[index  ] = ratW*mVertAttribs[index  ] + movX;
              mVertAttribs[index+1] = ratH*mVertAttribs[index+1] + movY;
@@ -513,9 +512,11 @@ public abstract class MeshBase
            comp.setMap(newMap);
            }
          }
+
+       vertex= comp.mEndIndex+1;
        }
 
-     mTFO.invalidate();
+     mVBO.invalidate();
      }
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
