commit d620ff0654b8cb23572038b980dd04602d1ccc0c
Author: Leszek Koltunski <leszek@distorted.org>
Date:   Wed Dec 14 22:35:34 2016 +0000

    Speed up ObjectTree: we no longer have to traverse the whole tree before rendering to mark everything as not-rendered-yet.

diff --git a/src/main/java/org/distorted/library/DistortedObjectTree.java b/src/main/java/org/distorted/library/DistortedObjectTree.java
index 15912ba..db1247b 100644
--- a/src/main/java/org/distorted/library/DistortedObjectTree.java
+++ b/src/main/java/org/distorted/library/DistortedObjectTree.java
@@ -51,14 +51,14 @@ public class DistortedObjectTree
     long ID;
     int numPointingNodes;
     DistortedFramebuffer mDF;
-    boolean mRendered;
+    int numRendered;
 
     NodeData(long id)
       {
       ID              = id;
       numPointingNodes= 1;
       mDF             = null;
-      mRendered       = false;
+      numRendered     = 0;
       }
     }
  
@@ -70,18 +70,6 @@ public class DistortedObjectTree
     mMapNodeID.clear();
     }
 
-///////////////////////////////////////////////////////////////////////////////////////////////////
-
-  private void markRecursive()
-    {
-    mData.mRendered = false;
-   
-    synchronized(this)
-      {
-      for(int i=0; i<mNumChildren[0]; i++) mChildren.get(i).markRecursive();
-      }
-    }
-  
 ///////////////////////////////////////////////////////////////////////////////////////////////////
   
   private void drawRecursive(long currTime, DistortedFramebuffer df)
@@ -94,9 +82,8 @@ public class DistortedObjectTree
       }
     else
       {
-      if( !mData.mRendered )
+      if( mData.numRendered==0 )
         {
-        mData.mRendered = true;
         mData.mDF.setAsOutput();
 
         GLES20.glClearColor(0.0f, 0.0f, 0.0f, 0.0f);
@@ -117,6 +104,9 @@ public class DistortedObjectTree
           }
         }
 
+      mData.numRendered++;
+      mData.numRendered %= mData.numPointingNodes;
+
       df.setAsOutput();
       mData.mDF.setAsInput();
       }
@@ -206,8 +196,7 @@ public class DistortedObjectTree
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////  
 // this will be called on startup and every time OpenGL context has been lost
-// also call this from the constructor if the OpenGL context has been created already.
-    
+
   static void reset()
     {
     NodeData tmp;   
@@ -219,7 +208,7 @@ public class DistortedObjectTree
       if( tmp.mDF != null )
         {
     	  tmp.mDF.reset();
-        tmp.mRendered  = false;
+        tmp.numRendered = 0;
         }
       }
     }
@@ -471,7 +460,6 @@ public class DistortedObjectTree
   public void draw(long currTime)
     {  
     GLES20.glBindFramebuffer(GLES20.GL_FRAMEBUFFER, 0);
-    markRecursive();
     drawRecursive(currTime,Distorted.mFramebuffer);
     DistortedFramebuffer.deleteAllMarked();
     DistortedTexture.deleteAllMarked();
@@ -489,7 +477,6 @@ public class DistortedObjectTree
   public void draw(long currTime, DistortedFramebuffer df)
     {
     df.setAsOutput();
-    markRecursive();
     drawRecursive(currTime,df);
     DistortedFramebuffer.deleteAllMarked();
     DistortedTexture.deleteAllMarked();
