commit 24624a1a1ececb85338c297c2ea80db9174595c1
Author: Leszek Koltunski <leszek@koltunski.pl>
Date:   Mon Dec 17 15:45:22 2018 +0000

    Add support for MeshSphere (add ability to display it in the 'Effects3D' and 'Inflate' apps).
    Still a bit buggy!

diff --git a/src/main/java/org/distorted/examples/effects3d/Effects3DActivity.java b/src/main/java/org/distorted/examples/effects3d/Effects3DActivity.java
index e59de16..e1c2741 100644
--- a/src/main/java/org/distorted/examples/effects3d/Effects3DActivity.java
+++ b/src/main/java/org/distorted/examples/effects3d/Effects3DActivity.java
@@ -41,7 +41,7 @@ public class Effects3DActivity extends Activity
   {
   private static final int COLOR_OFF = 0xffffe81f;
   private static final int COLOR_ON  = 0xff0000ff;
-  private static final int COLOR_INAC= 0xff00ff00;
+  private static final int COLOR_INAC= 0xff999999;
 
   private int mNumCols = 1;
   private int mNumRows = 1;
@@ -108,7 +108,7 @@ public class Effects3DActivity extends Activity
     Spinner typeSpinner  = findViewById(R.id.objectpicker_spinnerType);
     typeSpinner.setOnItemSelectedListener(this);
 
-    String[] objectType = new String[] {"Mesh: Cubes", "Mesh: Flat"};
+    String[] objectType = new String[] {"Mesh: Cubes", "Mesh: Flat", "Mesh: Sphere", "Mesh: Quad"};
 
     ArrayAdapter<String> adapterType = new ArrayAdapter<>(this, android.R.layout.simple_spinner_item, objectType);
     adapterType.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
@@ -178,7 +178,7 @@ public class Effects3DActivity extends Activity
 
   public void onClick(View view)
     {
-    if( mObjectType!=1 )
+    if( mObjectType==0 )  // cubes
       {
       Button tmp = (Button)view;
       int id = tmp.getId();
@@ -201,7 +201,7 @@ public class Effects3DActivity extends Activity
       for(int col=0; col<mNumCols; col++)
         {
         butt = (Button)tr.getVirtualChildAt(col);
-        butt.setBackgroundColor(mObjectType==1 ? COLOR_INAC : COLOR_ON);
+        butt.setBackgroundColor(mObjectType==0 ? COLOR_ON : COLOR_INAC);
         mShape[row*mNumCols+col] = true;
         }
       }
@@ -214,17 +214,29 @@ public class Effects3DActivity extends Activity
     Intent mainInt = new Intent( getApplicationContext(), Effects3DActivity2.class);
     Bundle b = new Bundle();
 
+    int rows=0, cols=0;
+
+    switch(mObjectType)
+      {
+      case 0:
+      case 1: rows = mNumRows;
+              cols = mNumCols;
+              break;
+      case 2: rows = mNumRows;   // always make the sphere equal in X and Y
+              cols = mNumRows;   //
+              break;
+      case 3: rows = 1;          // a quad is always 1x1
+              cols = 1;
+              break;
+      }
+
     b.putInt("type", mObjectType);
-    b.putInt("cols", mNumCols);
-    b.putInt("rows", mNumRows);
+    b.putInt("cols", cols);
+    b.putInt("rows", rows);
     b.putInt("slices", mNumSlic);
     b.putInt("bitmap", mBitmapID);
 
-    if( mObjectType==1 )
-      {
-      b.putString("string", "");
-      }
-    else
+    if( mObjectType==0 )   // cubes
       {
       String str = "";
 
@@ -233,6 +245,10 @@ public class Effects3DActivity extends Activity
 
       b.putString("string", str);
       }
+    else
+      {
+      b.putString("string", "");
+      }
 
     mainInt.putExtras(b);
     startActivity(mainInt);
@@ -248,6 +264,26 @@ public class Effects3DActivity extends Activity
                                               {
                                               mObjectType = pos;
                                               uncheckAll();
+
+                                              switch(mObjectType)
+                                                {
+                                                case 0: mColsPicker.setEnabled(true);
+                                                        mRowsPicker.setEnabled(true);
+                                                        mSlicPicker.setEnabled(true);
+                                                        break;
+                                                case 1: mColsPicker.setEnabled(true);
+                                                        mRowsPicker.setEnabled(true);
+                                                        mSlicPicker.setEnabled(false);
+                                                        break;
+                                                case 2: mColsPicker.setEnabled(false);
+                                                        mRowsPicker.setEnabled(true);
+                                                        mSlicPicker.setEnabled(false);
+                                                        break;
+                                                case 3: mColsPicker.setEnabled(false);
+                                                        mRowsPicker.setEnabled(false);
+                                                        mSlicPicker.setEnabled(false);
+                                                        break;
+                                                }
                                               }
                                             break;
       case R.id.objectpicker_spinnerBitmap: switch(pos)
diff --git a/src/main/java/org/distorted/examples/effects3d/Effects3DActivity2.java b/src/main/java/org/distorted/examples/effects3d/Effects3DActivity2.java
index 6c340a5..927ef19 100644
--- a/src/main/java/org/distorted/examples/effects3d/Effects3DActivity2.java
+++ b/src/main/java/org/distorted/examples/effects3d/Effects3DActivity2.java
@@ -39,6 +39,8 @@ import org.distorted.library.main.DistortedTexture;
 import org.distorted.library.mesh.MeshCubes;
 import org.distorted.library.mesh.MeshFlat;
 import org.distorted.library.mesh.MeshBase;
+import org.distorted.library.mesh.MeshQuad;
+import org.distorted.library.mesh.MeshSphere;
 
 import java.io.IOException;
 import java.io.InputStream;
@@ -101,8 +103,17 @@ public class Effects3DActivity2 extends AppCompatActivity
     DistortedEffects.setMax(EffectType.VERTEX  ,10);    // those have to be called before
     DistortedEffects.setMax(EffectType.FRAGMENT,10);    // any DistortedEffect get created!
 
-    if( mObjectType==1 ) mMesh = new MeshFlat(mNumCols,mNumRows);
-    else                 mMesh = new MeshCubes(mNumCols, mString, mNumSlic);
+    switch(mObjectType)
+      {
+      case 0: mMesh = new MeshCubes(mNumCols, mString, mNumSlic);
+              break;
+      case 1: mMesh = new MeshFlat(mNumCols,mNumRows);
+              break;
+      case 2: mMesh = new MeshSphere(mNumRows);
+              break;
+      case 3: mMesh = new MeshQuad();
+              break;
+      }
 
     mMesh.setShowNormals(mShowNormal);
     mTexture= new DistortedTexture(mNumCols,mNumRows);
diff --git a/src/main/java/org/distorted/examples/effects3d/Effects3DRenderer.java b/src/main/java/org/distorted/examples/effects3d/Effects3DRenderer.java
index 00e0b41..43232c6 100644
--- a/src/main/java/org/distorted/examples/effects3d/Effects3DRenderer.java
+++ b/src/main/java/org/distorted/examples/effects3d/Effects3DRenderer.java
@@ -93,7 +93,7 @@ class Effects3DRenderer implements GLSurfaceView.Renderer
       DistortedEffects regionEffects     = new DistortedEffects();
 
       MeshBase mesh    = act.getMesh();
-      MeshFlat quad      = new MeshFlat(1,1);
+      MeshFlat quad    = new MeshFlat(1,1);
 
       mObjWidth = mObjectTexture.getWidth();
       mObjHeight= mObjectTexture.getHeight();
diff --git a/src/main/java/org/distorted/examples/inflate/InflateActivity.java b/src/main/java/org/distorted/examples/inflate/InflateActivity.java
index e0a5dd1..069c2c7 100644
--- a/src/main/java/org/distorted/examples/inflate/InflateActivity.java
+++ b/src/main/java/org/distorted/examples/inflate/InflateActivity.java
@@ -41,7 +41,7 @@ public class InflateActivity extends Activity
   {
   private static final int COLOR_OFF = 0xffffe81f;
   private static final int COLOR_ON  = 0xff0000ff;
-  private static final int COLOR_INAC= 0xff00ff00;
+  private static final int COLOR_INAC= 0xff999999;
 
   private int mNumCols = 1;
   private int mNumRows = 1;
@@ -108,7 +108,7 @@ public class InflateActivity extends Activity
     Spinner typeSpinner  = findViewById(R.id.objectpicker_spinnerType);
     typeSpinner.setOnItemSelectedListener(this);
 
-    String[] objectType = new String[] {"Mesh: Cubes", "Mesh: Flat"};
+    String[] objectType = new String[] {"Mesh: Cubes", "Mesh: Flat", "Mesh: Sphere", "Mesh: Quad"};
 
     ArrayAdapter<String> adapterType = new ArrayAdapter<>(this, android.R.layout.simple_spinner_item, objectType);
     adapterType.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
@@ -178,7 +178,7 @@ public class InflateActivity extends Activity
 
   public void onClick(View view)
     {
-    if( mObjectType!=1 )
+    if( mObjectType==0 )  // cubes
       {
       Button tmp = (Button)view;
       int id = tmp.getId();
@@ -201,7 +201,7 @@ public class InflateActivity extends Activity
       for(int col=0; col<mNumCols; col++)
         {
         butt = (Button)tr.getVirtualChildAt(col);
-        butt.setBackgroundColor(mObjectType==1 ? COLOR_INAC : COLOR_ON);
+        butt.setBackgroundColor(mObjectType==0 ? COLOR_ON : COLOR_INAC);
         mShape[row*mNumCols+col] = true;
         }
       }
@@ -214,17 +214,29 @@ public class InflateActivity extends Activity
     Intent mainInt = new Intent( getApplicationContext(), InflateActivity2.class);
     Bundle b = new Bundle();
 
+    int rows=0, cols=0;
+
+    switch(mObjectType)
+      {
+      case 0:
+      case 1: rows = mNumRows;
+              cols = mNumCols;
+              break;
+      case 2: rows = mNumRows;   // always make the sphere equal in X and Y
+              cols = mNumRows;   //
+              break;
+      case 3: rows = 1;          // a quad is always 1x1
+              cols = 1;
+              break;
+      }
+
     b.putInt("type", mObjectType);
-    b.putInt("cols", mNumCols);
-    b.putInt("rows", mNumRows);
+    b.putInt("cols", cols);
+    b.putInt("rows", rows);
     b.putInt("slices", mNumSlic);
     b.putInt("bitmap", mBitmapID);
 
-    if( mObjectType==1 )
-      {
-      b.putString("string", "");
-      }
-    else
+    if( mObjectType==0 )   // cubes
       {
       String str = "";
 
@@ -233,6 +245,10 @@ public class InflateActivity extends Activity
 
       b.putString("string", str);
       }
+    else
+      {
+      b.putString("string", "");
+      }
 
     mainInt.putExtras(b);
     startActivity(mainInt);
@@ -248,6 +264,26 @@ public class InflateActivity extends Activity
                                               {
                                               mObjectType = pos;
                                               uncheckAll();
+
+                                              switch(mObjectType)
+                                                {
+                                                case 0: mColsPicker.setEnabled(true);
+                                                        mRowsPicker.setEnabled(true);
+                                                        mSlicPicker.setEnabled(true);
+                                                        break;
+                                                case 1: mColsPicker.setEnabled(true);
+                                                        mRowsPicker.setEnabled(true);
+                                                        mSlicPicker.setEnabled(false);
+                                                        break;
+                                                case 2: mColsPicker.setEnabled(false);
+                                                        mRowsPicker.setEnabled(true);
+                                                        mSlicPicker.setEnabled(false);
+                                                        break;
+                                                case 3: mColsPicker.setEnabled(false);
+                                                        mRowsPicker.setEnabled(false);
+                                                        mSlicPicker.setEnabled(false);
+                                                        break;
+                                                }
                                               }
                                             break;
       case R.id.objectpicker_spinnerBitmap: switch(pos)
diff --git a/src/main/java/org/distorted/examples/inflate/InflateActivity2.java b/src/main/java/org/distorted/examples/inflate/InflateActivity2.java
index 2b7dc80..e50d864 100644
--- a/src/main/java/org/distorted/examples/inflate/InflateActivity2.java
+++ b/src/main/java/org/distorted/examples/inflate/InflateActivity2.java
@@ -35,6 +35,8 @@ import org.distorted.library.main.DistortedTexture;
 import org.distorted.library.mesh.MeshBase;
 import org.distorted.library.mesh.MeshCubes;
 import org.distorted.library.mesh.MeshFlat;
+import org.distorted.library.mesh.MeshQuad;
+import org.distorted.library.mesh.MeshSphere;
 
 import java.io.IOException;
 import java.io.InputStream;
@@ -100,14 +102,23 @@ public class InflateActivity2 extends Activity implements SeekBar.OnSeekBarChang
       mNumSlic       = b.getInt("slices");
       mBitmapID      = b.getInt("bitmap");
 
-      if( objectType==1 ) mMesh = new MeshFlat(mNumCols,mNumRows);
-      else                mMesh = new MeshCubes(mNumCols, str, mNumSlic);
+      switch(objectType)
+        {
+        case 0: mMesh = new MeshCubes(mNumCols, str, mNumSlic);
+                break;
+        case 1: mMesh = new MeshFlat(mNumCols,mNumRows);
+                break;
+        case 2: mMesh = new MeshSphere(mNumRows);
+                break;
+        case 3: mMesh = new MeshQuad();
+                break;
+        }
 
       mTexture= new DistortedTexture(mNumCols,mNumRows);
 
       setContentView(R.layout.inflatelayout);
 
-      mTextLevel = (TextView)findViewById(R.id.inflateText);
+      mTextLevel = findViewById(R.id.inflateText);
       SeekBar levelBar = findViewById(R.id.inflateLevel);
       levelBar.setOnSeekBarChangeListener(this);
 
diff --git a/src/main/java/org/distorted/examples/inflate/InflateRenderer.java b/src/main/java/org/distorted/examples/inflate/InflateRenderer.java
index ac42e2d..74107de 100644
--- a/src/main/java/org/distorted/examples/inflate/InflateRenderer.java
+++ b/src/main/java/org/distorted/examples/inflate/InflateRenderer.java
@@ -100,8 +100,10 @@ class InflateRenderer implements GLSurfaceView.Renderer
     
     public void onSurfaceChanged(GL10 glUnused, int width, int height) 
       {
+      final float SCALE = 0.75f;
+
       mScreenMin = width<height ? width:height;
-      float factor = ( width*mObjHeight > height*mObjWidth ) ? (0.75f*height)/mObjHeight :  (0.75f*width)/mObjWidth;
+      float factor = ( width*mObjHeight > height*mObjWidth ) ? (SCALE*height)/mObjHeight :  (SCALE*width)/mObjWidth;
       mMove.set( (width-factor*mObjWidth)/2 , (height-factor*mObjHeight)/2 , 0);
       mScale.set(factor,factor,factor);
       mCenter.set( (float)mObjWidth/2, (float)mObjHeight/2, -(float)mObjDepth/2 );
