commit 85bfeb7a460fa8ee568db2af486d5565b8156768
Author: Leszek Koltunski <leszek@koltunski.pl>
Date:   Wed Jun 13 22:33:03 2018 +0100

    Try and avoid re-sorting the children by buckets (if we can!). This makes change in rendering order in the 'Transparency' app actually work.

diff --git a/src/main/java/org/distorted/library/main/DistortedMaster.java b/src/main/java/org/distorted/library/main/DistortedMaster.java
index 2305b37..38a45fa 100644
--- a/src/main/java/org/distorted/library/main/DistortedMaster.java
+++ b/src/main/java/org/distorted/library/main/DistortedMaster.java
@@ -96,16 +96,27 @@ public class DistortedMaster
     }
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
-// can make this logarithmic but the typical number of children is very small anyway
+// Can make this logarithmic but the typical number of children is very small anyway.
+//
+// We want to keep same buckets next to each other, while avoiding changes in order of the children
+// (if possible!) We want to keep bucket=0 (i.e. the non-postprocessed children) at the beginning.
 
-  static void addSorted(ArrayList<DistortedNode> mChildren, DistortedNode newChild)
+  static void addSortingByBuckets(ArrayList<DistortedNode> mChildren, DistortedNode newChild)
     {
     int i,num = mChildren.size();
     long bucket = newChild.getPostprocessQueue().getID();
+    boolean sameBucket = false;
 
     for(i=0; i<num; i++)
       {
-      if( mChildren.get(i).getPostprocessQueue().getID() > bucket ) break;
+      if( mChildren.get(i).getPostprocessQueue().getID() == bucket )
+        {
+        sameBucket=true;
+        }
+      else if( sameBucket || bucket==0 )
+        {
+        break;
+        }
       }
 
     mChildren.add(i,newChild);
diff --git a/src/main/java/org/distorted/library/main/DistortedNode.java b/src/main/java/org/distorted/library/main/DistortedNode.java
index 20668b5..7f3d728 100644
--- a/src/main/java/org/distorted/library/main/DistortedNode.java
+++ b/src/main/java/org/distorted/library/main/DistortedNode.java
@@ -228,7 +228,7 @@ public class DistortedNode implements DistortedMaster.Slave
     if( mNumChildren[0]==0 && newData.mFBO!=null )
       {
       newData.mFBO.markForDeletion();
-      android.util.Log.d("NODE", "ERROR!! this NodeData cannot possibly contain a non-null FBO!! "+newData.mFBO.getID() );
+      android.util.Log.e("NODE", "ERROR!! this NodeData cannot possibly contain a non-null FBO!! "+newData.mFBO.getID() );
       newData.mFBO = null;
       }
 
@@ -362,13 +362,13 @@ public class DistortedNode implements DistortedMaster.Slave
     if( mParent!=null )
       {
       mParent.mChildren.remove(this);
-      DistortedMaster.addSorted(mParent.mChildren,this);
+      DistortedMaster.addSortingByBuckets(mParent.mChildren,this);
       }
     else if( mSurfaceParent!=null )
       {
       ArrayList<DistortedNode> children = mSurfaceParent.getChildren();
       children.remove(this);
-      DistortedMaster.addSorted(children,this);
+      DistortedMaster.addSortingByBuckets(children,this);
       }
     }
 
@@ -649,7 +649,7 @@ public class DistortedNode implements DistortedMaster.Slave
                      if( mChildren==null ) mChildren = new ArrayList<>(2);
                      job.node.mParent = this;
                      job.node.mSurfaceParent = null;
-                     DistortedMaster.addSorted(mChildren,job.node);
+                     DistortedMaster.addSortingByBuckets(mChildren,job.node);
                      mNumChildren[0]++;
                      break;
         case DETACH: numChanges++;
@@ -676,7 +676,7 @@ public class DistortedNode implements DistortedMaster.Slave
                        }
                      break;
         case SORT  : mChildren.remove(job.node);
-                     DistortedMaster.addSorted(mChildren,job.node);
+                     DistortedMaster.addSortingByBuckets(mChildren,job.node);
                      break;
         }
       }
diff --git a/src/main/java/org/distorted/library/main/DistortedOutputSurface.java b/src/main/java/org/distorted/library/main/DistortedOutputSurface.java
index df03a60..4331071 100644
--- a/src/main/java/org/distorted/library/main/DistortedOutputSurface.java
+++ b/src/main/java/org/distorted/library/main/DistortedOutputSurface.java
@@ -889,7 +889,7 @@ public abstract class DistortedOutputSurface extends DistortedSurface implements
         {
         case ATTACH: if( mChildren==null ) mChildren = new ArrayList<>(2);
                      job.node.setSurfaceParent(this);
-                     DistortedMaster.addSorted(mChildren,job.node);
+                     DistortedMaster.addSortingByBuckets(mChildren,job.node);
                      mNumChildren++;
                      break;
         case DETACH: if( mNumChildren>0 && mChildren.remove(job.node) )
@@ -912,7 +912,7 @@ public abstract class DistortedOutputSurface extends DistortedSurface implements
                        }
                      break;
         case SORT  : mChildren.remove(job.node);
-                     DistortedMaster.addSorted(mChildren,job.node);
+                     DistortedMaster.addSortingByBuckets(mChildren,job.node);
                      break;
         }
       }
