commit 3c8b19030fa7eac124a0e3d4773cd5ff2ab590d4
Author: Leszek Koltunski <leszek@distoretedandroid.org>
Date:   Wed Dec 14 16:52:38 2016 +0000

    Major restructuring with DistortedTexture. One now is able to create Textures anywhere, even from a thread which does not hold the OpenGL context. Same for DistortedFramebuffers.

diff --git a/src/main/java/org/distorted/examples/dynamic/DynamicRenderer.java b/src/main/java/org/distorted/examples/dynamic/DynamicRenderer.java
index 9220f31..4f172ea 100644
--- a/src/main/java/org/distorted/examples/dynamic/DynamicRenderer.java
+++ b/src/main/java/org/distorted/examples/dynamic/DynamicRenderer.java
@@ -68,13 +68,13 @@ class DynamicRenderer implements GLSurfaceView.Renderer
    public void onSurfaceCreated(GL10 glUnused, EGLConfig config) 
      {   
      try
-        {
-        Distorted.onSurfaceCreated(mView.getContext());
-        }
-      catch(Exception ex)
-        {
-        android.util.Log.e("Renderer", ex.getMessage() );
-        }
+       {
+       Distorted.onSurfaceCreated(mView.getContext());
+       }
+     catch(Exception ex)
+       {
+       android.util.Log.e("Renderer", ex.getMessage() );
+       }
      }
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
diff --git a/src/main/java/org/distorted/examples/movingeffects/MovingEffectsRenderer.java b/src/main/java/org/distorted/examples/movingeffects/MovingEffectsRenderer.java
index 7229896..8f72893 100644
--- a/src/main/java/org/distorted/examples/movingeffects/MovingEffectsRenderer.java
+++ b/src/main/java/org/distorted/examples/movingeffects/MovingEffectsRenderer.java
@@ -47,6 +47,7 @@ class MovingEffectsRenderer implements GLSurfaceView.Renderer
    private GridFlat mGrid;
    private DistortedEffectQueues mQueues;
    private DistortedTexture mTexture;
+   private boolean mRefresh;
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
@@ -60,6 +61,7 @@ class MovingEffectsRenderer implements GLSurfaceView.Renderer
      mView = v;
 
      mQueues = new DistortedEffectQueues();
+     mRefresh = true;
      }
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
@@ -94,6 +96,13 @@ class MovingEffectsRenderer implements GLSurfaceView.Renderer
      return mQueues;
      }
 
+///////////////////////////////////////////////////////////////////////////////////////////////////
+
+   void setRefresh()
+     {
+     mRefresh = true;
+     }
+
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
    public void onSurfaceCreated(GL10 glUnused, EGLConfig config) 
@@ -132,11 +141,12 @@ class MovingEffectsRenderer implements GLSurfaceView.Renderer
        
      long time = System.currentTimeMillis();
       
-     if (mView.getCurrentEffect() == MovingEffectsSurfaceView.EFFECT_POINTS )
+     if (mView.getCurrentEffect() == MovingEffectsSurfaceView.EFFECT_POINTS && mRefresh )
        {
        drawBackground();   
        mView.drawCurve(mCanvas,time);
        mTexture.setTexture(mBitmap);
+       mRefresh = false;
        }
       
      mQueues.draw(time,mTexture,mGrid);
diff --git a/src/main/java/org/distorted/examples/movingeffects/MovingEffectsSurfaceView.java b/src/main/java/org/distorted/examples/movingeffects/MovingEffectsSurfaceView.java
index 355ae07..a920305 100644
--- a/src/main/java/org/distorted/examples/movingeffects/MovingEffectsSurfaceView.java
+++ b/src/main/java/org/distorted/examples/movingeffects/MovingEffectsSurfaceView.java
@@ -203,6 +203,7 @@ public class MovingEffectsSurfaceView extends GLSurfaceView
         di3D.removeAll();
         mRegion.removeAll();
         mCurrEffect = EFFECT_POINTS;
+        mRenderer.setRefresh();
         }
       }
 
@@ -216,18 +217,14 @@ public class MovingEffectsSurfaceView extends GLSurfaceView
 
         float[] drawCoord = new float[3];
         Static3D cu;
-        int lit = mTime> 0 ? (int)((float)(time-mTime)*NUM_POINTS/LOOP_TIME)  : 0;
-            
+
         if( len>=2 )
           {
           float step = (float)LOOP_TIME/(NUM_POINTS+1);
 
           for(int i=0; i<NUM_POINTS; i++)
             {
-            int color = i<=lit ? 0xff - (lit           -i)*0xff/(NUM_POINTS-1)
-                               : 0xff - (lit+NUM_POINTS-i)*0xff/(NUM_POINTS-1);
-         
-            mPaint.setColor( 0xffffff + ((color&0xff)<<24) );  
+            mPaint.setColor( 0xffffffff );
             di3D.interpolateMain( drawCoord, 0, (long)(i*step) );
             c.drawCircle(drawCoord[0], drawCoord[1], mSize1, mPaint );
             }
@@ -281,7 +278,8 @@ public class MovingEffectsSurfaceView extends GLSurfaceView
                                           di3D.add(new Static3D(xDown,yDown,0));
                                           mRegion.add(new Static4D(xDown,yDown,mSizeR,mSizeR));
                                           }
-                                        } 
+                                        }
+                                      mRenderer.setRefresh();
                                       break;
         case MotionEvent.ACTION_MOVE: if( moving>=0 )
                                         {
@@ -290,7 +288,8 @@ public class MovingEffectsSurfaceView extends GLSurfaceView
 
                                         di3D.setPoint(moving, xDown, yDown, 0);
                                         mRegion.setPoint(moving, xDown, yDown, mSizeR, mSizeR);
-                                        }                           
+                                        }
+                                      mRenderer.setRefresh();
                                       break;
         case MotionEvent.ACTION_UP  : moving = -1;
                                       break;
diff --git a/src/main/java/org/distorted/examples/olimpic/OlimpicRenderer.java b/src/main/java/org/distorted/examples/olimpic/OlimpicRenderer.java
index 7dd7655..a0c292a 100644
--- a/src/main/java/org/distorted/examples/olimpic/OlimpicRenderer.java
+++ b/src/main/java/org/distorted/examples/olimpic/OlimpicRenderer.java
@@ -68,7 +68,6 @@ class OlimpicRenderer implements GLSurfaceView.Renderer
 
       mScreenW = 9*LEAF_SIZE;
       mScreenH = 9*LEAF_SIZE;
-
       mScreen = new DistortedObjectTree(new DistortedTexture(mScreenW,mScreenH), queue, grid);
      
       Dynamic1D rot = new Dynamic1D(5000,0.0f);
@@ -87,12 +86,12 @@ class OlimpicRenderer implements GLSurfaceView.Renderer
 
       for(int i=0; i<NUM_CIRCLES; i++)
         {
-        if( i==0 )
+        if( i<=1 )
           {
           queue = new DistortedEffectQueues();
           mCircleNode[i] = new DistortedObjectTree(new DistortedTexture(3*LEAF_SIZE,3*LEAF_SIZE), queue, grid);
         
-          for(int j=0; j<NUM_LEAVES; j++)
+          for(int j=0; j<NUM_LEAVES-i; j++)
             {
             queue = new DistortedEffectQueues();
             mCircleNode[i].attach(mLeaf, queue, grid);
@@ -104,7 +103,7 @@ class OlimpicRenderer implements GLSurfaceView.Renderer
           {
           mCircleNode[i] = new DistortedObjectTree(mCircleNode[0], Distorted.CLONE_BITMAP|Distorted.CLONE_CHILDREN);
           }
-      
+
         mScreen.attach(mCircleNode[i]);
         queue = mCircleNode[i].getQueues();
         queue.move( new Static3D(positions[2*i], positions[2*i+1], 0) );
diff --git a/src/main/java/org/distorted/examples/starwars/StarWarsRenderer.java b/src/main/java/org/distorted/examples/starwars/StarWarsRenderer.java
index 60d0c55..448a694 100644
--- a/src/main/java/org/distorted/examples/starwars/StarWarsRenderer.java
+++ b/src/main/java/org/distorted/examples/starwars/StarWarsRenderer.java
@@ -348,7 +348,7 @@ class StarWarsRenderer implements GLSurfaceView.Renderer, EffectListener
         {
         mRoot.detach(mGFFAQueue);
         mGFFAQueue.delete();
-        mGFFATexture.delete();
+        mGFFATexture.markForDeletion();
 
         int screenW=mScreenTexture.getWidth();
         int screenH=mScreenTexture.getHeight();
@@ -374,7 +374,7 @@ class StarWarsRenderer implements GLSurfaceView.Renderer, EffectListener
         {
         mRoot.detach(mLogoQueue);
         mLogoQueue.delete();
-        mLogoTexture.delete();
+        mLogoTexture.markForDeletion();
         
         int crawlW = mCrawlTexture.getWidth();
         int crawlH = mCrawlTexture.getHeight();
@@ -407,9 +407,9 @@ class StarWarsRenderer implements GLSurfaceView.Renderer, EffectListener
         mRoot.detach(mBackground);
         mBackground.detach(mCrawlQueue);
         mCrawlQueue.delete();
-        mCrawlTexture.delete();
+        mCrawlTexture.markForDeletion();
         mCrawlBackgroundQueue.delete();
-        mCrawlBackgroundTexture.delete();
+        mCrawlBackgroundTexture.markForDeletion();
         }
       }
     }
