commit b2adcd5717d4b03d8a3ffa9af6cae25bbbe8c96c
Author: Leszek Koltunski <leszek@koltunski.pl>
Date:   Mon Jun 12 14:48:37 2023 +0200

    Beginnings of MeshMultigon (does not work yet)

diff --git a/src/main/java/org/distorted/examples/meshfile/MeshFileActivity.java b/src/main/java/org/distorted/examples/meshfile/MeshFileActivity.java
index 0ad3430..19ed41b 100644
--- a/src/main/java/org/distorted/examples/meshfile/MeshFileActivity.java
+++ b/src/main/java/org/distorted/examples/meshfile/MeshFileActivity.java
@@ -43,10 +43,12 @@ public class MeshFileActivity extends Activity implements AdapterView.OnItemSele
 {
     final static int PROCEDURAL = -1;
     final static int POLYGON    = -2;
+    final static int MULTIGON   = -3;
 
     private LinearLayout mLayout;
     private int mResource;
     private String[] mNames = new String[] { "polygon"    ,
+                                             "multigon"   ,
                                              "procedural" ,
                                              "deferredjob",
                                              "meshjoin"   ,
@@ -188,19 +190,20 @@ public class MeshFileActivity extends Activity implements AdapterView.OnItemSele
         switch(pos)
           {
           case  0: mResource = POLYGON          ; break;
-          case  1: mResource = PROCEDURAL       ; break;
-          case  2: mResource = R.raw.deferredjob; break;
-          case  3: mResource = R.raw.meshjoin   ; break;
-          case  4: mResource = R.raw.predeform  ; break;
-          case  5: mResource = R.raw.cube2      ; break;
-          case  6: mResource = R.raw.cube3      ; break;
-          case  7: mResource = R.raw.cube4      ; break;
-          case  8: mResource = R.raw.cube5      ; break;
-          case  9: mResource = R.raw.pyra3      ; break;
-          case 10: mResource = R.raw.pyra4      ; break;
-          case 11: mResource = R.raw.pyra5      ; break;
-          case 12: mResource = R.raw.dino       ; break;
-          case 13: mResource = R.raw.skewb      ; break;
+          case  1: mResource = MULTIGON         ; break;
+          case  2: mResource = PROCEDURAL       ; break;
+          case  3: mResource = R.raw.deferredjob; break;
+          case  4: mResource = R.raw.meshjoin   ; break;
+          case  5: mResource = R.raw.predeform  ; break;
+          case  6: mResource = R.raw.cube2      ; break;
+          case  7: mResource = R.raw.cube3      ; break;
+          case  8: mResource = R.raw.cube4      ; break;
+          case  9: mResource = R.raw.cube5      ; break;
+          case 10: mResource = R.raw.pyra3      ; break;
+          case 11: mResource = R.raw.pyra4      ; break;
+          case 12: mResource = R.raw.pyra5      ; break;
+          case 13: mResource = R.raw.dino       ; break;
+          case 14: mResource = R.raw.skewb      ; break;
           }
         }
       }
diff --git a/src/main/java/org/distorted/examples/meshfile/MeshFileRenderer.java b/src/main/java/org/distorted/examples/meshfile/MeshFileRenderer.java
index 33299f3..522adda 100644
--- a/src/main/java/org/distorted/examples/meshfile/MeshFileRenderer.java
+++ b/src/main/java/org/distorted/examples/meshfile/MeshFileRenderer.java
@@ -38,6 +38,7 @@ import org.distorted.library.main.DistortedScreen;
 import org.distorted.library.main.DistortedTexture;
 import org.distorted.library.mesh.MeshBase;
 import org.distorted.library.mesh.MeshFile;
+import org.distorted.library.mesh.MeshMultigon;
 import org.distorted.library.mesh.MeshPolygon;
 import org.distorted.library.type.DynamicQuat;
 import org.distorted.library.type.Static3D;
@@ -58,6 +59,7 @@ import java.io.InputStream;
 import javax.microedition.khronos.egl.EGLConfig;
 import javax.microedition.khronos.opengles.GL10;
 
+import static org.distorted.examples.meshfile.MeshFileActivity.MULTIGON;
 import static org.distorted.examples.meshfile.MeshFileActivity.POLYGON;
 import static org.distorted.examples.meshfile.MeshFileActivity.PROCEDURAL;
 import static org.distorted.objectlib.main.TwistyObject.MESH_NICE;
@@ -186,6 +188,10 @@ class MeshFileRenderer implements GLSurfaceView.Renderer, DistortedLibrary.Libra
         {
         createPolygon();
         }
+      else if( resourceID==MULTIGON )
+        {
+        createMultigon();
+        }
       else
         {
         openMesh(resourceID);
@@ -214,6 +220,7 @@ class MeshFileRenderer implements GLSurfaceView.Renderer, DistortedLibrary.Libra
           resourceID == R.raw.meshjoin    ||
           resourceID == PROCEDURAL        ||
           resourceID == POLYGON           ||
+          resourceID == MULTIGON          ||
           resourceID == R.raw.predeform    ) return createWhiteTexture();
 
       if( resourceID == R.raw.cube2       ||
@@ -296,6 +303,41 @@ class MeshFileRenderer implements GLSurfaceView.Renderer, DistortedLibrary.Libra
       mMesh.setShowNormals(true);
       }
 
+///////////////////////////////////////////////////////////////////////////////////////////////////
+
+    private void createMultigon()
+      {
+      float A = 0.5f;
+      int extraIndex    = 1;
+      int extraVertices = 1;
+
+      float[] v1 = new float[] { -A,-A,  A,-A,  A,A, -A,A };
+      float[] v2 = new float[] {  A,-A,2*A,-A,2*A,A,  A,A };
+      float[][] vertices = new float[][] {v1,v2};
+
+      float[] c1 = new float[] { 0,0 };
+      float[] c2 = new float[] { 1.5f*A,0 };
+      float[][] centers = new float[][] { c1,c2 };
+
+      float C = 0.5f;
+      float[] bands = new float[] { 1.0f, 0.00f*C, 0.9f, 0.04f*C,  0.8f, 0.07f*C, 0.5f, 0.09f*C, 0.0f, 0.10f*C};
+
+/*
+      float B = 0.04f;
+      int numBands = 5;
+      float[] bands = new float[2*numBands];
+
+      for(int i=0; i<numBands; i++)
+        {
+        bands[2*i  ] = 1 + i/(1.0f-numBands);
+        bands[2*i+1] = B/(numBands-1)*i;
+        }
+*/
+      mMesh = new MeshMultigon(vertices,bands,extraIndex,extraVertices,centers);
+      mMesh.setEffectAssociation(0,0,0);
+      mMesh.setShowNormals(true);
+      }
+
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
     private void createMesh()
