commit 30094332d95d4cba80ebde0e7c52f2e445462f38
Author: Leszek Koltunski <leszek@koltunski.pl>
Date:   Mon Nov 16 19:41:09 2020 +0100

    More support for using the library from more than one activity. Should be working now!

diff --git a/src/main/java/org/distorted/library/effectqueue/EffectQueue.java b/src/main/java/org/distorted/library/effectqueue/EffectQueue.java
index a6da58a..84e2501 100644
--- a/src/main/java/org/distorted/library/effectqueue/EffectQueue.java
+++ b/src/main/java/org/distorted/library/effectqueue/EffectQueue.java
@@ -53,8 +53,7 @@ public abstract class EffectQueue implements InternalMaster.Slave
   float[] mFloatUniforms;
   int[] mIntUniforms;
 
-  static int[] mMax = new int[EffectType.LENGTH];
-  private static long mNextID;
+  private static long mNextID = 1;
   private static HashMap<ArrayList<Long>,Long> mMapID = new HashMap<>(); // maps lists of Effect IDs (longs) to a
                                                                          // single long - the queue ID.
   private long mID;
@@ -80,11 +79,6 @@ public abstract class EffectQueue implements InternalMaster.Slave
 
   private ArrayList<Job> mJobs = new ArrayList<>();
 
-  static
-    {
-    onDestroy();
-    }
-  
 ///////////////////////////////////////////////////////////////////////////////////////////////////
    
   EffectQueue(int numFloatUniforms, int numIntUniforms, int index)
@@ -139,7 +133,7 @@ public abstract class EffectQueue implements InternalMaster.Slave
       mNumFloatUniforms = source.mNumFloatUniforms;
       mNumIntUniforms   = source.mNumIntUniforms;
 
-      int max = mMax[mIndex];
+      int max = InternalStackFrameList.getMax(mIndex);
 
       if( max>0 )
         {
@@ -240,20 +234,14 @@ public abstract class EffectQueue implements InternalMaster.Slave
 
   public static boolean setMax(int index, int m)
     {
-    if( !InternalStackFrameList.isInitialized() || m<=mMax[index] )
-      {
-      mMax[index] = m<0 ? 0:m;
-      return true;
-      }
-
-    return false;
+    return InternalStackFrameList.setMax(index, Math.max(m,0));
     }
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
   public static int getMax(int index)
     {
-    return mMax[index];
+    return InternalStackFrameList.getMax(index);
     }
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
@@ -262,7 +250,6 @@ public abstract class EffectQueue implements InternalMaster.Slave
     {
     mNextID = 1;
     mMapID.clear();
-    EffectType.reset(mMax);
     }
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
@@ -368,7 +355,7 @@ public abstract class EffectQueue implements InternalMaster.Slave
   
   public boolean add(Effect effect)
     {
-    if( mMax[mIndex]>mNumEffectsToBe || !mCreated )
+    if( InternalStackFrameList.getMax(mIndex)>mNumEffectsToBe || !mCreated )
       {
       mJobs.add(new Job(ATTACH,-1,0,false,effect));
       InternalMaster.newSlave(this);
@@ -383,7 +370,7 @@ public abstract class EffectQueue implements InternalMaster.Slave
 
   public boolean add(Effect effect, int position)
     {
-    if( mMax[mIndex]>mNumEffectsToBe || !mCreated )
+    if( InternalStackFrameList.getMax(mIndex)>mNumEffectsToBe || !mCreated )
       {
       mJobs.add(new Job(ATTACH,position,0,false,effect));
       InternalMaster.newSlave(this);
@@ -437,7 +424,7 @@ public abstract class EffectQueue implements InternalMaster.Slave
 
       switch(job.type)
         {
-        case CREATE: int max = mMax[mIndex];
+        case CREATE: int max = InternalStackFrameList.getMax(mIndex);
                      if( max>0 )
                        {
                        mEffects       = new Effect[max];
@@ -447,8 +434,8 @@ public abstract class EffectQueue implements InternalMaster.Slave
                      mCreated = true;
 
                      break;
-        case ATTACH: if( mMax[mIndex]>mNumEffects ) // it is possible that we have first
-                       {                            // added effects and then lowered mMax
+        case ATTACH: if( InternalStackFrameList.getMax(mIndex)>mNumEffects ) // it is possible that we have first
+                       {                                                     // added effects and then lowered mMax
                        int position = job.num1;
 
                        if( position<0 )
diff --git a/src/main/java/org/distorted/library/main/DistortedLibrary.java b/src/main/java/org/distorted/library/main/DistortedLibrary.java
index 31b0677..be4861c 100644
--- a/src/main/java/org/distorted/library/main/DistortedLibrary.java
+++ b/src/main/java/org/distorted/library/main/DistortedLibrary.java
@@ -1093,7 +1093,7 @@ public class DistortedLibrary
   public static void onPause(long id)
     {
     InternalStackFrameList.onPause(id);
-    Dynamic.onPause();
+    Dynamic.onPause();  // common for all frames
 
     mLinkedListSSBO[0]= -1;
     mAtomicCounter = null;
@@ -1137,9 +1137,6 @@ android.util.Log.e("ON_DESTROY", "id="+id);
 
     if( InternalStackFrameList.isInitialized() )
       {
-      InternalStackFrameList.setInitialized(false);
-      mOITCompilationAttempted = false;
-
       InternalStackFrameList.onDestroy(id);
       InternalNodeData.onDestroy();
       InternalMaster.onDestroy();
@@ -1148,7 +1145,8 @@ android.util.Log.e("ON_DESTROY", "id="+id);
       EffectQueue.onDestroy();
       Effect.onDestroy();
       DeferredJobs.onDestroy();
-      EffectMessageSender.stopSending();
+
+      mOITCompilationAttempted = false;
       }
     }
 
diff --git a/src/main/java/org/distorted/library/main/InternalStackFrame.java b/src/main/java/org/distorted/library/main/InternalStackFrame.java
index 93ca8b8..56a4b1a 100644
--- a/src/main/java/org/distorted/library/main/InternalStackFrame.java
+++ b/src/main/java/org/distorted/library/main/InternalStackFrame.java
@@ -19,6 +19,8 @@
 
 package org.distorted.library.main;
 
+import org.distorted.library.effect.EffectType;
+
 import java.util.HashMap;
 import java.util.LinkedList;
 
@@ -49,7 +51,9 @@ public class InternalStackFrame
   private long mNextSystemID;                   //
   private long mTaskId;                         //
 
-  private static boolean mInitialized;          // DistortedLibrary
+  private boolean mInitialized;                 // DistortedLibrary
+
+  private int[] mMax;                           // EffectQueue
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
@@ -60,6 +64,9 @@ public class InternalStackFrame
     mNextClientID = 0;
     mNextSystemID = 0;
     mTaskId       = taskID;
+    mMax          = new int[EffectType.LENGTH];
+
+    EffectType.reset(mMax);
     }
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
@@ -227,6 +234,26 @@ public class InternalStackFrame
     mInitialized = init;
     }
 
+///////////////////////////////////////////////////////////////////////////////////////////////////
+
+  int getMax(int index)
+    {
+    return mMax[index];
+    }
+
+///////////////////////////////////////////////////////////////////////////////////////////////////
+
+  boolean setMax(int index, int max)
+    {
+    if( !mInitialized || max<mMax[index] )
+      {
+      mMax[index] = max;
+      return true;
+      }
+
+    return false;
+    }
+
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
   void debugLists(String frameMarker)
diff --git a/src/main/java/org/distorted/library/main/InternalStackFrameList.java b/src/main/java/org/distorted/library/main/InternalStackFrameList.java
index 20161f9..a1b6bfa 100644
--- a/src/main/java/org/distorted/library/main/InternalStackFrameList.java
+++ b/src/main/java/org/distorted/library/main/InternalStackFrameList.java
@@ -19,6 +19,8 @@
 
 package org.distorted.library.main;
 
+import org.distorted.library.message.EffectMessageSender;
+
 import java.util.ArrayList;
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
@@ -124,6 +126,13 @@ public class InternalStackFrameList
         break;
         }
       }
+
+    setInitialized(false);
+
+    if( num<2 )
+      {
+      EffectMessageSender.stopSending();
+      }
     }
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
@@ -207,4 +216,17 @@ public class InternalStackFrameList
     return mCurrentFrame.isInitialized();
     }
 
+///////////////////////////////////////////////////////////////////////////////////////////////////
+
+  public static int getMax(int index)
+    {
+    return mCurrentFrame.getMax(index);
+    }
+
+///////////////////////////////////////////////////////////////////////////////////////////////////
+
+  public static boolean setMax(int index,int max)
+    {
+    return mCurrentFrame.setMax(index,max);
+    }
 }
diff --git a/src/main/java/org/distorted/library/type/Dynamic.java b/src/main/java/org/distorted/library/type/Dynamic.java
index e72f274..c11216e 100644
--- a/src/main/java/org/distorted/library/type/Dynamic.java
+++ b/src/main/java/org/distorted/library/type/Dynamic.java
@@ -610,7 +610,6 @@ public abstract class Dynamic
     return mDuration;
     }
 
-
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 /**
  * @param convexity If set to the default (1.0f) then interpolation between 4 points
