commit dbe3079dfa687a6ed71fb5b7428102394f0c391c
Author: Leszek Koltunski <leszek@koltunski.pl>
Date:   Sat Jun 6 22:31:55 2020 +0100

    Extend the MeshBase.setTextureMaps API so that we are able to set a single texture map to a single texture component, or a few consecutive at a time, not necessarily starting from component 0.

diff --git a/src/main/java/org/distorted/library/mesh/DeferredJobs.java b/src/main/java/org/distorted/library/mesh/DeferredJobs.java
index edd8ace..faf9a2b 100644
--- a/src/main/java/org/distorted/library/mesh/DeferredJobs.java
+++ b/src/main/java/org/distorted/library/mesh/DeferredJobs.java
@@ -100,7 +100,7 @@ public class DeferredJobs
                                  break;
         case JOB_TYPE_COPY     : mTarget.copy(mSource[0]);
                                  break;
-        case JOB_TYPE_TEXTURE  : mTarget.textureMap(mMaps);
+        case JOB_TYPE_TEXTURE  : mTarget.textureMap(mMaps,mComp);
                                  break;
         case JOB_TYPE_ASSOC    : mTarget.setEffectAssociationNow(mComp,mAndAssoc,mEquAssoc);
                                  break;
@@ -335,10 +335,10 @@ public class DeferredJobs
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
-  static JobNode textureMap(MeshBase target, Static4D[] maps)
+  static JobNode textureMap(MeshBase target, Static4D[] maps, int comp)
     {
     JobNode jn = target.mJobNode[0];
-    Job job = new Job(JOB_TYPE_TEXTURE,target,null,null,null,maps,0,0,0);
+    Job job = new Job(JOB_TYPE_TEXTURE,target,null,null,null,maps,comp,0,0);
     JobNode node = new JobNode(job);
     node.mPrevJobs.add(jn);
     jn.mNextJobs.add(node);
diff --git a/src/main/java/org/distorted/library/mesh/MeshBase.java b/src/main/java/org/distorted/library/mesh/MeshBase.java
index 7b3c83c..f8e6564 100644
--- a/src/main/java/org/distorted/library/mesh/MeshBase.java
+++ b/src/main/java/org/distorted/library/mesh/MeshBase.java
@@ -490,11 +490,11 @@ public abstract class MeshBase
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
-   void textureMap(Static4D[] maps)
+   void textureMap(Static4D[] maps, int startComponent)
      {
      int num_comp = mTexComponent.size();
      int num_maps = maps.length;
-     int min = Math.min(num_comp, num_maps);
+     int min = Math.min(num_comp-startComponent, num_maps);
      int vertex = 0;
      Static4D newMap, oldMap;
      TexComponent comp;
@@ -503,7 +503,7 @@ public abstract class MeshBase
      for(int i=0; i<min; i++)
        {
        newMap = maps[i];
-       comp = mTexComponent.get(i);
+       comp = mTexComponent.get(i+startComponent);
 
        if( newMap!=null )
          {
@@ -852,17 +852,18 @@ public abstract class MeshBase
  *
  * A map's width and height have to be non-zero (but can be negative!)
  *
- * @param maps List of texture maps to apply to the texture's components.
+ * @param maps            List of texture maps to apply to the texture's components.
+ * @param startComponent  the component the first of the maps refers to.
  */
-   public void setTextureMap(Static4D[] maps)
+   public void setTextureMap(Static4D[] maps, int startComponent)
      {
      if( mJobNode[0]==null )
        {
-       textureMap(maps);
+       textureMap(maps,startComponent);
        }
      else
        {
-       mJobNode[0] = DeferredJobs.textureMap(this,maps);
+       mJobNode[0] = DeferredJobs.textureMap(this,maps,startComponent);
        }
      }
 
