commit e3c8751727baaf8fdaa2e6dd722643385fc30c3e
Author: Leszek Koltunski <leszek@koltunski.pl>
Date:   Tue Apr 28 12:28:50 2020 +0100

    Convert the first app, Inflate, to the new MeshBase.setStretch-less API ( use VertexEffectScale instead )

diff --git a/src/main/java/org/distorted/examples/inflate/InflateActivity.java b/src/main/java/org/distorted/examples/inflate/InflateActivity.java
index 953d57b..ae6dfe2 100644
--- a/src/main/java/org/distorted/examples/inflate/InflateActivity.java
+++ b/src/main/java/org/distorted/examples/inflate/InflateActivity.java
@@ -143,7 +143,7 @@ public class InflateActivity extends Activity
     int height= mLay.getHeight();
     int w = mNumCols>0 ? (int)( 0.9f*width / mNumCols) : 0;
     int h = mNumRows>0 ? (int)( 0.9f*height/ mNumRows) : 0;
-    int size= w<h ? w:h;
+    int size= Math.min(w, h);
     int pad = size<20 ? 1 : size/20;
 
     mLay.removeAllViews();
@@ -219,40 +219,13 @@ public class InflateActivity extends Activity
     Intent mainInt = new Intent( getApplicationContext(), InflateActivity2.class);
     Bundle b = new Bundle();
 
-    int rows,cols;
-
-    switch( InflateMeshList.getDimension(mObjectType) )
-      {
-      case 0: rows = 1;          // a quad
-              cols = 1;
-              break;
-      case 1: rows = mNumRows;   // Triangles, Sphere
-              cols = mNumRows;
-              break;
-      default:rows = mNumRows;
-              cols = mNumCols;
-              break;
-      }
-
-    b.putInt("type", mObjectType);
-    b.putInt("cols", cols);
-    b.putInt("rows", rows);
-    b.putInt("slices", mNumSlic);
+    b.putInt("type"  , mObjectType);
+    b.putInt("cols"  , InflateMeshList.getCols(mObjectType, mNumCols, mNumRows, mNumSlic) );
+    b.putInt("rows"  , InflateMeshList.getRows(mObjectType, mNumCols, mNumRows, mNumSlic) );
+    b.putInt("slices", InflateMeshList.getSlic(mObjectType, mNumCols, mNumRows, mNumSlic) );
     b.putInt("bitmap", mBitmapID);
 
-    if( mObjectType==0 )   // cubes
-      {
-      String str = "";
-
-      for(int i=0; i<mNumRows*mNumCols; i++)
-        str += mShape[i] ? "1" : "0";
-
-      b.putString("string", str);
-      }
-    else
-      {
-      b.putString("string", "");
-      }
+    b.putString("string", InflateMeshList.getString(mObjectType, mNumCols, mNumRows, mShape));
 
     mainInt.putExtras(b);
     startActivity(mainInt);
diff --git a/src/main/java/org/distorted/examples/inflate/InflateActivity2.java b/src/main/java/org/distorted/examples/inflate/InflateActivity2.java
index 9abb8c3..eba3f0e 100644
--- a/src/main/java/org/distorted/examples/inflate/InflateActivity2.java
+++ b/src/main/java/org/distorted/examples/inflate/InflateActivity2.java
@@ -49,6 +49,7 @@ public class InflateActivity2 extends Activity implements SeekBar.OnSeekBarChang
     private TextView mTextLevel;
     private DistortedTexture mTexture;
     private MeshBase mMesh;
+    private int mNumRows, mNumCols, mNumSlic;
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
     
@@ -94,13 +95,14 @@ public class InflateActivity2 extends Activity implements SeekBar.OnSeekBarChang
       String str     = b.getString("string");
       int objectType = b.getInt("type");
       int bitmapID   = b.getInt("bitmap");
-      int numCols    = b.getInt("cols");
-      int numRows    = b.getInt("rows");
-      int numSlic    = b.getInt("slices");
+      mNumCols       = b.getInt("cols");
+      mNumRows       = b.getInt("rows");
+      mNumSlic       = b.getInt("slices");
 
-      int maxsize = numCols > numRows ? (Math.max(numCols, numSlic)) : (Math.max(numRows, numSlic));
+      int maxsize = mNumCols > mNumRows ? (Math.max(mNumCols, mNumSlic)) : (Math.max(mNumRows, mNumSlic));
       createBitmap(maxsize,bitmapID);
-      mMesh =  InflateMeshList.createMesh(objectType, numCols, numRows, numSlic, bitmapID, str);
+      mMesh =  InflateMeshList.createMesh(objectType, mNumCols, mNumRows, mNumSlic, bitmapID, str);
+
       mTexture = new DistortedTexture();
 
       setContentView(R.layout.inflatelayout);
@@ -131,20 +133,11 @@ public class InflateActivity2 extends Activity implements SeekBar.OnSeekBarChang
       {
       if( bitmapID!=-1)
         {
-        InputStream is = getResources().openRawResource(bitmapID);
-
-        try
+        try (InputStream is = getResources().openRawResource(bitmapID))
           {
           mBitmap = BitmapFactory.decodeStream(is);
           }
-        finally
-          {
-          try
-            {
-            is.close();
-            }
-          catch(IOException e) { }
-          }
+        catch( IOException ex ) { android.util.Log.e("act", "failed to open resource "+bitmapID); }
         }
       else
         {
@@ -170,6 +163,27 @@ public class InflateActivity2 extends Activity implements SeekBar.OnSeekBarChang
         }
       }
 
+///////////////////////////////////////////////////////////////////////////////////////////////////
+
+    int getRows()
+      {
+      return mNumRows;
+      }
+
+///////////////////////////////////////////////////////////////////////////////////////////////////
+
+    int getCols()
+      {
+      return mNumCols;
+      }
+
+///////////////////////////////////////////////////////////////////////////////////////////////////
+
+    int getSlic()
+      {
+      return mNumSlic;
+      }
+
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
     public Bitmap getBitmap()
@@ -184,10 +198,9 @@ public class InflateActivity2 extends Activity implements SeekBar.OnSeekBarChang
       InflateSurfaceView v = this.findViewById(R.id.inflateSurfaceView);
       InflateRenderer renderer = v.getRenderer();
 
-      switch(parent.getId())
+      if( parent.getId()==R.id.inflateSpinnerMode)
         {
-        case R.id.inflateSpinnerMode: renderer.setRenderModeToOIT(pos==1);
-                                      break;
+        renderer.setRenderModeToOIT(pos==1);
         }
       }
 
diff --git a/src/main/java/org/distorted/examples/inflate/InflateMeshList.java b/src/main/java/org/distorted/examples/inflate/InflateMeshList.java
index 4b7da3c..c2d6c72 100644
--- a/src/main/java/org/distorted/examples/inflate/InflateMeshList.java
+++ b/src/main/java/org/distorted/examples/inflate/InflateMeshList.java
@@ -74,13 +74,78 @@ public enum InflateMeshList
     return  meshes[ordinal].mDimension;
     }
 
+///////////////////////////////////////////////////////////////////////////////////////////////////
+
+  static int getRows(int ordinal, int cols, int rows, int slic)
+    {
+    switch(ordinal)
+      {
+      case 0: return rows;  // cubes
+      case 1: return rows;  // rectangles
+      case 2: return rows;  // sphere
+      case 3: return 1;     // quad
+      case 4: return rows;  // triangles
+      }
+
+    return 0;
+    }
+
+///////////////////////////////////////////////////////////////////////////////////////////////////
+
+  static int getCols(int ordinal, int cols, int rows, int slic)
+    {
+    switch(ordinal)
+      {
+      case 0: return cols;  // cubes
+      case 1: return cols;  // rectangles
+      case 2: return rows;  // sphere
+      case 3: return 1;     // quad
+      case 4: return rows;  // triangles
+      }
+
+    return 0;
+    }
+
+///////////////////////////////////////////////////////////////////////////////////////////////////
+
+  static int getSlic(int ordinal, int cols, int rows, int slic)
+    {
+    switch(ordinal)
+      {
+      case 0: return slic;  // cubes
+      case 1: return rows;  // rectangles
+      case 2: return rows;  // sphere
+      case 3: return 1;     // quad
+      case 4: return rows;  // triangles
+      }
+
+    return 0;
+    }
+
+///////////////////////////////////////////////////////////////////////////////////////////////////
+
+  static String getString(int ordinal, int cols, int rows, boolean[] shape)
+    {
+    if( ordinal==0 )
+      {
+      String str = "";
+
+      for(int i=0; i<rows*cols; i++)
+        str += shape[i] ? "1" : "0";
+
+      return str;
+      }
+
+    return "";
+    }
+
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
   static MeshBase createMesh(int ordinal, int cols, int rows, int slic, int bitmapID, String str)
     {
     MeshBase mesh;
 
-    int maxsize = cols > rows ? (cols>slic ? cols:slic) : (rows>slic ? rows:slic) ;
+    int maxsize = cols > rows ? (Math.max(cols, slic)) : (Math.max(rows, slic)) ;
 
     switch( meshes[ordinal] )
       {
@@ -96,19 +161,14 @@ public enum InflateMeshList
 
                          mesh = new MeshCubes(cols, str, slic, mapFB, mapFB, mapLR, mapLR, mapTB, mapTB);
                          }
-                       mesh.setStretch(cols,rows,slic);
                        break;
       case Rectangles: mesh = new MeshRectangles(cols,rows);
-                       mesh.setStretch(cols,rows,0);
                        break;
       case Sphere    : mesh = new MeshSphere(rows);
-                       mesh.setStretch(rows,rows,rows);
                        break;
       case Quad      : mesh = new MeshQuad();
-                       mesh.setStretch(1,1,0);
                        break;
       case Triangles : mesh = new MeshTriangles(rows);
-                       mesh.setStretch(rows,rows,0);
                        break;
       default:         mesh = null;
                        android.util.Log.e("Meshes", "Error: unimplemented Mesh!");
diff --git a/src/main/java/org/distorted/examples/inflate/InflateRenderer.java b/src/main/java/org/distorted/examples/inflate/InflateRenderer.java
index 5b2ac3a..8031ef5 100644
--- a/src/main/java/org/distorted/examples/inflate/InflateRenderer.java
+++ b/src/main/java/org/distorted/examples/inflate/InflateRenderer.java
@@ -25,6 +25,7 @@ import javax.microedition.khronos.opengles.GL10;
 import org.distorted.library.effect.FragmentEffectAlpha;
 import org.distorted.library.effect.MatrixEffectQuaternion;
 import org.distorted.library.effect.MatrixEffectScale;
+import org.distorted.library.effect.VertexEffectScale;
 import org.distorted.library.main.DistortedEffects;
 import org.distorted.library.main.DistortedLibrary;
 import org.distorted.library.main.DistortedScreen;
@@ -63,7 +64,6 @@ class InflateRenderer implements GLSurfaceView.Renderer
       mView = v;
 
       mAlpha = new Static1D(1.0f);
-
       mScale= new Static3D(1,1,1);
 
       Static3D center=new Static3D(0,0,0);
@@ -73,9 +73,9 @@ class InflateRenderer implements GLSurfaceView.Renderer
       mTexture = act.getTexture();
       mMesh    = act.getMesh();
 
-      mObjWidth = mMesh.getStretchX();
-      mObjHeight= mMesh.getStretchY();
-      mObjDepth = mMesh.getStretchZ();
+      mObjWidth = act.getCols();
+      mObjHeight= act.getRows();
+      mObjDepth = act.getSlic();
 
       mQuat1 = new Static4D(0,0,0,1);  // unity
       mQuat2 = new Static4D(0,0,0,1);  // quaternions
@@ -87,6 +87,7 @@ class InflateRenderer implements GLSurfaceView.Renderer
       quatInt2.add(mQuat2);
 
       mEffects = new DistortedEffects();
+      mEffects.apply( new VertexEffectScale(new Static3D(mObjWidth,mObjHeight,mObjDepth) ) );
       mEffects.apply( new MatrixEffectScale(mScale));
       mEffects.apply( new MatrixEffectQuaternion(quatInt2, center) );
       mEffects.apply( new MatrixEffectQuaternion(quatInt1, center) );
@@ -110,7 +111,7 @@ class InflateRenderer implements GLSurfaceView.Renderer
       {
       final float SCALE = 0.75f;
 
-      mScreenMin = width<height ? width:height;
+      mScreenMin = Math.min(width, height);
       float factor = ( width*mObjHeight > height*mObjWidth ) ? (SCALE*height)/mObjHeight :  (SCALE*width)/mObjWidth;
       mScale.set(factor,factor,factor);
       mScreen.resize(width, height);
@@ -150,6 +151,7 @@ class InflateRenderer implements GLSurfaceView.Renderer
       mScreen.detachAll();
       mScreen.attach(mTexture,mEffects,mMesh);
 
+      VertexEffectScale.enable();
       FragmentEffectAlpha.enable();
 
       try
