commit 026856eccdb4c9066d55adde1cc644958e1ec1dd
Author: LeszekKoltunski <leszek@koltunski.pl>
Date:   Wed Apr 30 16:30:10 2025 +0200

    progress with the 'mesh' package.

diff --git a/src/main/java/org/distorted/library/mesh/DeferredJobs.kt b/src/main/java/org/distorted/library/mesh/DeferredJobs.kt
index 60fa2af..6a5e03e 100644
--- a/src/main/java/org/distorted/library/mesh/DeferredJobs.kt
+++ b/src/main/java/org/distorted/library/mesh/DeferredJobs.kt
@@ -179,8 +179,7 @@ object DeferredJobs
     fun copy(target: MeshBase, mesh: MeshBase): JobNode
     {
         val jn = mesh.mJobNode[0]
-        val meshes = arrayOfNulls<MeshBase>(1)
-        meshes[0] = mesh
+        val meshes = arrayOf(mesh)
         val job = Job(JOB_TYPE_COPY, target, meshes, null, null, null, 0, 0, 0, 0f, 0f, 0f, null)
         val node = JobNode(job)
         node.mPrevJobs!!.add(jn)
@@ -253,7 +252,7 @@ object DeferredJobs
 
     //////////////////////////////////////////////////////////////////////////
     class Job
-        (val mType: Int, val mTarget: MeshBase, source: Array<MeshBase?>?, vEff: VertexEffect?, mEff: MatrixEffect?,
+        (val mType: Int, val mTarget: MeshBase, source: Array<MeshBase>?, vEff: VertexEffect?, mEff: MatrixEffect?,
          maps: Array<Static4D?>?, comp: Int, and: Int, equ: Int, x: Float, y: Float, z: Float, comps: IntArray?)
     {
         private val mSource = source!!
diff --git a/src/main/java/org/distorted/library/mesh/MeshBandedTriangle.kt b/src/main/java/org/distorted/library/mesh/MeshBandedTriangle.kt
index b42d724..2f96c88 100644
--- a/src/main/java/org/distorted/library/mesh/MeshBandedTriangle.kt
+++ b/src/main/java/org/distorted/library/mesh/MeshBandedTriangle.kt
@@ -32,6 +32,14 @@ import kotlin.math.sqrt
  */
 class MeshBandedTriangle : MeshBase
 {
+    private var mMode = 0
+    private var mNumBands = 0
+    private var remainingVert = 0
+    private var numVertices = 0
+    private var extraBands = 0
+    private var extraVertices = 0
+    private var mVecX = 0f
+    private var mVecY = 0f
     private var mLeftX = 0f
     private var mLeftY = 0f
     private var mRightX = 0f
@@ -41,19 +49,8 @@ class MeshBandedTriangle : MeshBase
 
     private lateinit var mNormL: FloatArray
     private lateinit var mNormR: FloatArray
-    private var mMode = 0
-
     private lateinit var mBands: FloatArray
-    private var mNumBands = 0
-
-    private var remainingVert = 0
-    override var numVertices: Int = 0
-    private var extraBands = 0
-    private var extraVertices = 0
-
     private lateinit var mCurveCache: FloatArray
-    private var mVecX = 0f
-    private var mVecY = 0f
 
     companion object
     {
diff --git a/src/main/java/org/distorted/library/mesh/MeshBase.kt b/src/main/java/org/distorted/library/mesh/MeshBase.kt
index 3feb6ca..4305286 100644
--- a/src/main/java/org/distorted/library/mesh/MeshBase.kt
+++ b/src/main/java/org/distorted/library/mesh/MeshBase.kt
@@ -51,8 +51,7 @@ abstract class MeshBase
     private var mVBO1: InternalBuffer? = null
     private var mVBO2: InternalBuffer? = null
     private var mTFO: InternalBuffer // main vertex buffer and transform feedback buffer
-    var numVertices: Int = 0
-        private set
+    private var numVertices: Int = 0
     private var mVertAttribs1: FloatArray? = null // packed: PosX,PosY,PosZ, NorX,NorY,NorZ
     private var mVertAttribs2: FloatArray? = null // packed: TexS,TexT, Component
     var inflate: Float
@@ -145,10 +144,8 @@ abstract class MeshBase
     fun copy(original: MeshBase)
     {
         shallowCopy(original)
-
         mVBO1 = InternalBuffer(GLES30.GL_ARRAY_BUFFER, GLES30.GL_STATIC_DRAW)
-        mVertAttribs1 = FloatArray(numVertices*VERT1_ATTRIBS)
-        System.arraycopy(original.mVertAttribs1, 0, mVertAttribs1, 0, numVertices*VERT1_ATTRIBS)
+        mVertAttribs1 = original.mVertAttribs1?.copyOf()
     }
 
     ///////////////////////////////////////////////////////////////////////////////////////////////////
@@ -167,8 +164,7 @@ abstract class MeshBase
         mEffComponent!!.addAll(original.mEffComponent!!)
 
         mVBO2 = InternalBuffer(GLES30.GL_ARRAY_BUFFER, GLES30.GL_STATIC_DRAW)
-        mVertAttribs2 = FloatArray(numVertices*VERT2_ATTRIBS)
-        System.arraycopy(original.mVertAttribs2, 0, mVertAttribs2, 0, numVertices*VERT2_ATTRIBS)
+        mVertAttribs2 = original.mVertAttribs2?.copyOf()
     }
 
     ///////////////////////////////////////////////////////////////////////////////////////////////////
@@ -384,16 +380,32 @@ abstract class MeshBase
 
         if (origVertices>0)
         {
-            System.arraycopy(mVertAttribs1, 0, newAttribs1, 0, VERT1_ATTRIBS*numVertices)
-            System.arraycopy(mVertAttribs1, VERT1_ATTRIBS*(origVertices-1), newAttribs1, VERT1_ATTRIBS*origVertices, VERT1_ATTRIBS)
-            System.arraycopy(mVertAttribs2, 0, newAttribs2, 0, VERT2_ATTRIBS*numVertices)
-            System.arraycopy(mVertAttribs2, VERT2_ATTRIBS*(origVertices-1), newAttribs2, VERT2_ATTRIBS*origVertices, VERT2_ATTRIBS)
+            val v1 = VERT1_ATTRIBS*origVertices
+            val v2 = VERT2_ATTRIBS*origVertices
+
+            mVertAttribs1?.copyInto(newAttribs1, 0               , 0 , v1)
+            mVertAttribs1?.copyInto(newAttribs1, v1-VERT1_ATTRIBS, v1, v1+VERT1_ATTRIBS)
+            mVertAttribs2?.copyInto(newAttribs2, 0               , 0 , v2)
+            mVertAttribs2?.copyInto(newAttribs2, v2-VERT2_ATTRIBS, v2, v2+VERT2_ATTRIBS)
+            /*
+            System.arraycopy(mVertAttribs1, 0, newAttribs1, 0, v1)
+            System.arraycopy(mVertAttribs1, v1-VERT1_ATTRIBS, newAttribs1, v1, VERT1_ATTRIBS)
+            System.arraycopy(mVertAttribs2, 0, newAttribs2, 0, v2)
+            System.arraycopy(mVertAttribs2, v2-VERT2_ATTRIBS, newAttribs2, v2, VERT2_ATTRIBS)
+            */
             origVertices++
 
             if (numVertices%2==1)
             {
-                System.arraycopy(mVertAttribs1, VERT1_ATTRIBS*(origVertices-1), newAttribs1, VERT1_ATTRIBS*origVertices, VERT1_ATTRIBS)
-                System.arraycopy(mVertAttribs2, VERT2_ATTRIBS*(origVertices-1), newAttribs2, VERT2_ATTRIBS*origVertices, VERT2_ATTRIBS)
+                val w1 = VERT1_ATTRIBS*origVertices
+                val w2 = VERT2_ATTRIBS*origVertices
+
+                mVertAttribs1?.copyInto(newAttribs1,w1-VERT1_ATTRIBS,w1,w1+VERT1_ATTRIBS)
+                mVertAttribs2?.copyInto(newAttribs2,w2-VERT2_ATTRIBS,w2,w2+VERT2_ATTRIBS)
+                /*
+                System.arraycopy(mVertAttribs1, w1-VERT1_ATTRIBS, newAttribs1, w1, VERT1_ATTRIBS)
+                System.arraycopy(mVertAttribs2, w2-VERT2_ATTRIBS, newAttribs2, w2, VERT2_ATTRIBS)
+                */
                 origVertices++
             }
         }
@@ -405,24 +417,49 @@ abstract class MeshBase
 
             if (origVertices>0)
             {
+                val v1 = VERT1_ATTRIBS*origVertices
+                val v2 = VERT2_ATTRIBS*origVertices
+                mesh.mVertAttribs1?.copyInto(newAttribs1,0, v1, v1+VERT1_ATTRIBS)
+                mesh.mVertAttribs2?.copyInto(newAttribs2,0, v2, v2+VERT2_ATTRIBS)
+
+                /*
                 System.arraycopy(mesh.mVertAttribs1, 0, newAttribs1, VERT1_ATTRIBS*origVertices, VERT1_ATTRIBS)
                 System.arraycopy(mesh.mVertAttribs2, 0, newAttribs2, VERT2_ATTRIBS*origVertices, VERT2_ATTRIBS)
+                */
                 origVertices++
             }
+            val v1 = VERT1_ATTRIBS*origVertices
+            val v2 = VERT2_ATTRIBS*origVertices
+            mesh.mVertAttribs1?.copyInto(newAttribs1,0, v1, v1+VERT1_ATTRIBS*numVertices)
+            mesh.mVertAttribs2?.copyInto(newAttribs2,0, v2, v2+VERT2_ATTRIBS*numVertices)
+            /*
             System.arraycopy(mesh.mVertAttribs1, 0, newAttribs1, VERT1_ATTRIBS*origVertices, VERT1_ATTRIBS*numVertices)
             System.arraycopy(mesh.mVertAttribs2, 0, newAttribs2, VERT2_ATTRIBS*origVertices, VERT2_ATTRIBS*numVertices)
+             */
             origVertices += numVertices
 
             if (i<numMeshes-1&&numVertices>0)
             {
+                val w1 = VERT1_ATTRIBS*origVertices
+                val w2 = VERT2_ATTRIBS*origVertices
+                mesh.mVertAttribs1?.copyInto(newAttribs1, VERT1_ATTRIBS*(numVertices-1), w1, w1+VERT1_ATTRIBS)
+                mesh.mVertAttribs2?.copyInto(newAttribs2, VERT2_ATTRIBS*(numVertices-1), w2, w2+VERT2_ATTRIBS)
+                /*
                 System.arraycopy(mesh.mVertAttribs1, VERT1_ATTRIBS*(numVertices-1), newAttribs1, VERT1_ATTRIBS*origVertices, VERT1_ATTRIBS)
                 System.arraycopy(mesh.mVertAttribs2, VERT2_ATTRIBS*(numVertices-1), newAttribs2, VERT2_ATTRIBS*origVertices, VERT2_ATTRIBS)
+                */
                 origVertices++
 
                 if (numVertices%2==1)
                 {
+                    val z1 = VERT1_ATTRIBS*origVertices
+                    val z2 = VERT2_ATTRIBS*origVertices
+                    mesh.mVertAttribs1?.copyInto(newAttribs1, VERT1_ATTRIBS*(numVertices-1), z1, z1+VERT1_ATTRIBS)
+                    mesh.mVertAttribs2?.copyInto(newAttribs2, VERT2_ATTRIBS*(numVertices-1), z2, z2+VERT2_ATTRIBS)
+                    /*
                     System.arraycopy(mesh.mVertAttribs1, VERT1_ATTRIBS*(numVertices-1), newAttribs1, VERT1_ATTRIBS*origVertices, VERT1_ATTRIBS)
                     System.arraycopy(mesh.mVertAttribs2, VERT2_ATTRIBS*(numVertices-1), newAttribs2, VERT2_ATTRIBS*origVertices, VERT2_ATTRIBS)
+                    */
                     origVertices++
                 }
             }
diff --git a/src/main/java/org/distorted/library/mesh/MeshCubes.kt b/src/main/java/org/distorted/library/mesh/MeshCubes.kt
index 69f3a97..3fec871 100644
--- a/src/main/java/org/distorted/library/mesh/MeshCubes.kt
+++ b/src/main/java/org/distorted/library/mesh/MeshCubes.kt
@@ -31,8 +31,7 @@ import org.distorted.library.type.Static4D
  */
 class MeshCubes : MeshBase
 {
-    private class Edge
-        (val side: Int, val row: Int, val col: Int)
+    private class Edge(val side: Int, val row: Int, val col: Int)
 
     private var mTexMappingX: FloatArray? = null
     private var mTexMappingY: FloatArray? = null
@@ -48,7 +47,7 @@ class MeshCubes : MeshBase
     private var mEdges: ArrayList<Edge>? = ArrayList()
 
     private var currVert = 0
-    override var numVertices: Int = 0
+    private var numVertices = 0
     private var mSideBends = 0
     private var mEdgeNum = 0
     private var mSideWalls = 0
diff --git a/src/main/java/org/distorted/library/mesh/MeshMultigon.kt b/src/main/java/org/distorted/library/mesh/MeshMultigon.kt
index ab2bbd5..4ab2097 100644
--- a/src/main/java/org/distorted/library/mesh/MeshMultigon.kt
+++ b/src/main/java/org/distorted/library/mesh/MeshMultigon.kt
@@ -258,7 +258,7 @@ class MeshMultigon : MeshBase
                 }
             }
 
-            return MeshBandedTriangle.Companion.MODE_NORMAL
+            return MeshBandedTriangle.MODE_NORMAL
         }
         else
         {
@@ -278,7 +278,7 @@ class MeshMultigon : MeshBase
                 normR[0] = 0f
                 normR[1] = 1f
 
-                return MeshBandedTriangle.Companion.MODE_FLAT
+                return MeshBandedTriangle.MODE_FLAT
             }
             else
             {
@@ -301,7 +301,7 @@ class MeshMultigon : MeshBase
                     normR[1] = dy
                 }
 
-                return MeshBandedTriangle.Companion.MODE_INVERTED
+                return MeshBandedTriangle.MODE_INVERTED
             }
         }
     }
diff --git a/src/main/java/org/distorted/library/mesh/MeshPolygon.kt b/src/main/java/org/distorted/library/mesh/MeshPolygon.kt
index 0255193..8fffe80 100644
--- a/src/main/java/org/distorted/library/mesh/MeshPolygon.kt
+++ b/src/main/java/org/distorted/library/mesh/MeshPolygon.kt
@@ -33,22 +33,22 @@ import kotlin.math.sqrt
  */
 class MeshPolygon : MeshBase
 {
-    private var mPolygonVertices: Array<FloatArray>
+    private lateinit var mPolygonVertices: Array<FloatArray>
+    private lateinit var mPolygonBands: FloatArray
+    private lateinit var mCurveCache: FloatArray
+
     private var mNumPolygonVertices = 0
-    private var mPolygonBands: FloatArray
     private var mNumPolygonBands = 0
-
     private var remainingVert = 0
-    override var numVertices: Int = 0
+    private var numVertices = 0
     private var extraBand = 0
     private var extraVertices = 0
 
-    private var mCurveCache: FloatArray
-
     companion object
     {
         private const val NUM_CACHE = 20
     }
+
     ///////////////////////////////////////////////////////////////////////////////////////////////////
     // polygonVertices>=3 , polygonBands>=2
     private fun computeNumberOfVertices()
diff --git a/src/main/java/org/distorted/library/mesh/MeshQuad.kt b/src/main/java/org/distorted/library/mesh/MeshQuad.kt
index fa9684b..f2f2cbd 100644
--- a/src/main/java/org/distorted/library/mesh/MeshQuad.kt
+++ b/src/main/java/org/distorted/library/mesh/MeshQuad.kt
@@ -21,7 +21,6 @@
 package org.distorted.library.mesh
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
-
 /**
  * Create a quad - two triangles with vertices at (+-0.5,+-0.5).
  *
diff --git a/src/main/java/org/distorted/library/mesh/MeshSphere.kt b/src/main/java/org/distorted/library/mesh/MeshSphere.kt
index b8aa0c6..2322702 100644
--- a/src/main/java/org/distorted/library/mesh/MeshSphere.kt
+++ b/src/main/java/org/distorted/library/mesh/MeshSphere.kt
@@ -36,7 +36,7 @@ import kotlin.math.sin
 class MeshSphere : MeshBase
 {
     private var currentVert = 0
-    override var numVertices: Int = 0
+    private var numVertices = 0
 
     companion object
     {
diff --git a/src/main/java/org/distorted/library/mesh/MeshSquare.kt b/src/main/java/org/distorted/library/mesh/MeshSquare.kt
index 1e5d58e..bbed969 100644
--- a/src/main/java/org/distorted/library/mesh/MeshSquare.kt
+++ b/src/main/java/org/distorted/library/mesh/MeshSquare.kt
@@ -34,7 +34,7 @@ class MeshSquare : MeshBase
     private var mCols = 0
     private var mRows = 0
     private var remainingVert = 0
-    override var numVertices: Int = 0
+    private var numVertices = 0
 
     ///////////////////////////////////////////////////////////////////////////////////////////////////
     // Create a flat, full grid.
diff --git a/src/main/java/org/distorted/library/mesh/MeshTriangle.kt b/src/main/java/org/distorted/library/mesh/MeshTriangle.kt
index 0db6ce7..a800276 100644
--- a/src/main/java/org/distorted/library/mesh/MeshTriangle.kt
+++ b/src/main/java/org/distorted/library/mesh/MeshTriangle.kt
@@ -28,7 +28,7 @@ import org.distorted.library.main.DistortedLibrary
  */
 class MeshTriangle : MeshBase
 {
-    override var numVertices: Int = 0
+    private var numVertices = 0
     private var remainingVert = 0
 
     ///////////////////////////////////////////////////////////////////////////////////////////////////
