commit b5636dbff062d963914fc2f76342bbe4220f23fd
Author: leszek <leszek@koltunski.pl>
Date:   Mon Apr 3 22:50:39 2017 +0100

    Improve Dynamic and FBO apps.

diff --git a/src/main/java/org/distorted/examples/dynamic/DynamicActivity.java b/src/main/java/org/distorted/examples/dynamic/DynamicActivity.java
index 5e71570..de826df 100644
--- a/src/main/java/org/distorted/examples/dynamic/DynamicActivity.java
+++ b/src/main/java/org/distorted/examples/dynamic/DynamicActivity.java
@@ -31,43 +31,47 @@ import android.widget.SeekBar;
 import android.widget.TextView;
 import android.widget.SeekBar.OnSeekBarChangeListener;
 
-///////////////////////////////////////////////////////////////////
+///////////////////////////////////////////////////////////////////////////////////////////////////
 
 public class DynamicActivity extends Activity implements OnSeekBarChangeListener
     {
     private TextView textD, textN;
-    private int progress0, progress1, progress2;
+    private int p0,p1,p2;
+    private int mDim, mMode;
 
-///////////////////////////////////////////////////////////////////
+///////////////////////////////////////////////////////////////////////////////////////////////////
     @Override
-    protected void onCreate(Bundle savedInstanceState) 
+    protected void onCreate(Bundle savedState)
       {
-      super.onCreate(savedInstanceState);
+      super.onCreate(savedState);
       setContentView(R.layout.dynamicslayout);
 
       textD = (TextView)findViewById(R.id.dynamicTextDuration);
       textN = (TextView)findViewById(R.id.dynamicTextNoise);
 
-      SeekBar bar = (SeekBar)findViewById(R.id.dynamicSeekDuration);
-      bar.setOnSeekBarChangeListener(this);
-      bar.setProgress(50);
-
-      progress0=0;
-      progress1=0;
-      progress2=0;
-
-      bar = (SeekBar)findViewById(R.id.dynamicSeekNoise0);
-      bar.setProgress(0);
-      bar.setOnSeekBarChangeListener(this);
-      bar = (SeekBar)findViewById(R.id.dynamicSeekNoise1);
-      bar.setProgress(0);
-      bar.setOnSeekBarChangeListener(this);
-      bar = (SeekBar)findViewById(R.id.dynamicSeekNoise2);
-      bar.setProgress(0);
-      bar.setOnSeekBarChangeListener(this);
+      p0=p1=p2=0;
+      mDim = DynamicSurfaceView.DIM_2D;
+      mMode= Dynamic1D.MODE_LOOP;
+
+      SeekBar barD = (SeekBar)findViewById(R.id.dynamicSeekDuration);
+      barD.setOnSeekBarChangeListener(this);
+      SeekBar bar0 = (SeekBar)findViewById(R.id.dynamicSeekNoise0);
+      bar0.setOnSeekBarChangeListener(this);
+      SeekBar bar1 = (SeekBar)findViewById(R.id.dynamicSeekNoise1);
+      bar1.setOnSeekBarChangeListener(this);
+      SeekBar bar2 = (SeekBar)findViewById(R.id.dynamicSeekNoise2);
+      bar2.setOnSeekBarChangeListener(this);
+
+      if( savedState==null )
+        {
+        barD.setProgress(50);
+        bar0.setProgress(0);
+        bar1.setProgress(0);
+        bar2.setProgress(0);
+        }
       }
 
-///////////////////////////////////////////////////////////////////
+///////////////////////////////////////////////////////////////////////////////////////////////////
     @Override
     protected void onResume() 
       {
@@ -77,7 +81,7 @@ public class DynamicActivity extends Activity implements OnSeekBarChangeListener
       view.onResume();
       }
 
-///////////////////////////////////////////////////////////////////
+///////////////////////////////////////////////////////////////////////////////////////////////////
     @Override
     protected void onPause() 
       {
@@ -87,14 +91,14 @@ public class DynamicActivity extends Activity implements OnSeekBarChangeListener
       super.onPause();
       }
     
-///////////////////////////////////////////////////////////////////
+///////////////////////////////////////////////////////////////////////////////////////////////////
     @Override
     public void onStop()
       {
       super.onStop();
       }
 
-///////////////////////////////////////////////////////////////////
+///////////////////////////////////////////////////////////////////////////////////////////////////
     @Override
     public void onDestroy()
       {  
@@ -102,62 +106,106 @@ public class DynamicActivity extends Activity implements OnSeekBarChangeListener
       super.onDestroy();
       }     
  
-///////////////////////////////////////////////////////////////////
+///////////////////////////////////////////////////////////////////////////////////////////////////
     
     public void Loop(View v)
       {
       DynamicSurfaceView view = (DynamicSurfaceView) this.findViewById(R.id.dynamicSurfaceView);
       view.setMode(Dynamic1D.MODE_LOOP);
+      mMode = Dynamic1D.MODE_LOOP;
       }     
     
-///////////////////////////////////////////////////////////////////
+///////////////////////////////////////////////////////////////////////////////////////////////////
 
     public void Path(View v)
       {
       DynamicSurfaceView view = (DynamicSurfaceView) this.findViewById(R.id.dynamicSurfaceView);
       view.setMode(Dynamic1D.MODE_PATH);
+      mMode = Dynamic1D.MODE_PATH;
       }  
 
-///////////////////////////////////////////////////////////////////
+///////////////////////////////////////////////////////////////////////////////////////////////////
 
     public void Jump(View v)
       {
       DynamicSurfaceView view = (DynamicSurfaceView) this.findViewById(R.id.dynamicSurfaceView);
       view.setMode(Dynamic1D.MODE_JUMP);
+      mMode = Dynamic1D.MODE_JUMP;
       }  
     
-///////////////////////////////////////////////////////////////////
+///////////////////////////////////////////////////////////////////////////////////////////////////
 
     public void Dim1D(View v)
       {
       DynamicSurfaceView view = (DynamicSurfaceView) this.findViewById(R.id.dynamicSurfaceView);
       view.setDimension(DynamicSurfaceView.DIM_1D);
+      mDim = DynamicSurfaceView.DIM_1D;
       }  
 
-///////////////////////////////////////////////////////////////////
+///////////////////////////////////////////////////////////////////////////////////////////////////
 
     public void Dim2D(View v)
       {
       DynamicSurfaceView view = (DynamicSurfaceView) this.findViewById(R.id.dynamicSurfaceView);
       view.setDimension(DynamicSurfaceView.DIM_2D);
+      mDim = DynamicSurfaceView.DIM_2D;
       }  
     
-///////////////////////////////////////////////////////////////////
+///////////////////////////////////////////////////////////////////////////////////////////////////
 
     public void Dim3DXY(View v)
       {
       DynamicSurfaceView view = (DynamicSurfaceView) this.findViewById(R.id.dynamicSurfaceView);
       view.setDimension(DynamicSurfaceView.DIM_3DXY);
+      mDim = DynamicSurfaceView.DIM_3DXY;
       }  
 
-///////////////////////////////////////////////////////////////////
+///////////////////////////////////////////////////////////////////////////////////////////////////
 
     public void Dim3DXZ(View v)
       {
       DynamicSurfaceView view = (DynamicSurfaceView) this.findViewById(R.id.dynamicSurfaceView);
       view.setDimension(DynamicSurfaceView.DIM_3DXZ);
+      mDim = DynamicSurfaceView.DIM_3DXZ;
       }  
-    
+
+///////////////////////////////////////////////////////////////////////////////////////////////////
+
+    @Override
+    public void onSaveInstanceState(Bundle savedInstanceState)
+      {
+      super.onSaveInstanceState(savedInstanceState);
+
+      savedInstanceState.putInt("dim" , mDim );
+      savedInstanceState.putInt("mode", mMode);
+      }
+
+///////////////////////////////////////////////////////////////////////////////////////////////////
+
+    @Override
+    public void onRestoreInstanceState(Bundle savedInstanceState)
+      {
+      super.onRestoreInstanceState(savedInstanceState);
+
+      mDim = savedInstanceState.getInt("dim");
+      mMode= savedInstanceState.getInt("mode");
+
+      switch(mDim)
+        {
+        case DynamicSurfaceView.DIM_1D  : Dim1D(null)  ; break;
+        case DynamicSurfaceView.DIM_2D  : Dim2D(null)  ; break;
+        case DynamicSurfaceView.DIM_3DXY: Dim3DXY(null); break;
+        case DynamicSurfaceView.DIM_3DXZ: Dim3DXZ(null); break;
+        }
+
+      switch(mMode)
+        {
+        case Dynamic1D.MODE_JUMP: Jump(null); break;
+        case Dynamic1D.MODE_PATH: Path(null); break;
+        case Dynamic1D.MODE_LOOP: Loop(null); break;
+        }
+      }
+
 ///////////////////////////////////////////////////////////////////
     
     public void onProgressChanged(SeekBar bar, int progress, boolean fromUser) 
@@ -177,13 +225,13 @@ public class DynamicActivity extends Activity implements OnSeekBarChangeListener
         {
         switch(id)
           {
-          case R.id.dynamicSeekNoise0  : progress0 = progress; break;
-          case R.id.dynamicSeekNoise1  : progress1 = progress; break;
-          case R.id.dynamicSeekNoise2  : progress2 = progress; break;
+          case R.id.dynamicSeekNoise0  : p0 = progress; break;
+          case R.id.dynamicSeekNoise1  : p1 = progress; break;
+          case R.id.dynamicSeekNoise2  : p2 = progress; break;
           }
 
-        view.setNoise(progress0/100.0f,progress1/100.0f,progress2/100.0f);
-        textN.setText("Noise: "+(progress0/100.f)+" "+(progress1/100.f)+" "+(progress2/100.f));
+        view.setNoise(p0/100.0f,p1/100.0f,p2/100.0f);
+        textN.setText("Noise: "+(p0/100.f)+" "+(p1/100.f)+" "+(p2/100.f));
         }
       }
 
diff --git a/src/main/java/org/distorted/examples/fbo/FBOActivity.java b/src/main/java/org/distorted/examples/fbo/FBOActivity.java
index be6d88a..f78add5 100644
--- a/src/main/java/org/distorted/examples/fbo/FBOActivity.java
+++ b/src/main/java/org/distorted/examples/fbo/FBOActivity.java
@@ -30,13 +30,20 @@ import android.view.View;
 
 public class FBOActivity extends Activity 
 {
+    private boolean mDepth;
+
 ///////////////////////////////////////////////////////////////////////////////////////////////////
     
     @Override
-    protected void onCreate(Bundle icicle) 
+    protected void onCreate(Bundle savedState)
       {
-      super.onCreate(icicle);
+      super.onCreate(savedState);
       setContentView(R.layout.fbolayout);
+
+      if( savedState==null )
+        {
+        mDepth = true;
+        }
       }
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
@@ -78,6 +85,7 @@ public class FBOActivity extends Activity
       FBORenderer renderer = view.getRenderer();
 
       renderer.setDepth(true);
+      mDepth = true;
       }
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
@@ -88,5 +96,29 @@ public class FBOActivity extends Activity
       FBORenderer renderer = view.getRenderer();
 
       renderer.setDepth(false);
+      mDepth = false;
       }
+
+///////////////////////////////////////////////////////////////////////////////////////////////////
+
+    @Override
+    public void onSaveInstanceState(Bundle savedInstanceState)
+      {
+      super.onSaveInstanceState(savedInstanceState);
+      savedInstanceState.putBoolean("depth", mDepth);
+      }
+
+///////////////////////////////////////////////////////////////////////////////////////////////////
+
+    @Override
+    public void onRestoreInstanceState(Bundle savedInstanceState)
+      {
+      super.onRestoreInstanceState(savedInstanceState);
+
+      mDepth = savedInstanceState.getBoolean("depth");
+
+      if(mDepth) DepthYes(null);
+      else       DepthNo(null);
+      }
+
 }
diff --git a/src/main/java/org/distorted/examples/fbo/FBORenderer.java b/src/main/java/org/distorted/examples/fbo/FBORenderer.java
index 266584f..aabaf85 100644
--- a/src/main/java/org/distorted/examples/fbo/FBORenderer.java
+++ b/src/main/java/org/distorted/examples/fbo/FBORenderer.java
@@ -56,32 +56,39 @@ class FBORenderer implements GLSurfaceView.Renderer
    private DistortedScreen mScreen;
    private DistortedNode mRoot;
    private int lisaHeight, lisaWidth;
+   private boolean mDepth;
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
    FBORenderer(GLSurfaceView v)
       {
       mView   = v;
+      mDepth  = true;
       mEffects= new DistortedEffects();
       mScreen = new DistortedScreen();
       }
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
-   void setDepth(boolean depth)
-      {
-      if( mRoot!=null )
-        {
-        if( depth ) mRoot.glEnable (GLES30.GL_DEPTH_TEST);
-        else        mRoot.glDisable(GLES30.GL_DEPTH_TEST);
+   private void setDepthPriv()
+     {
+     if( mDepth ) mRoot.glEnable (GLES30.GL_DEPTH_TEST);
+     else         mRoot.glDisable(GLES30.GL_DEPTH_TEST);
 
-        mRoot.glDepthMask(depth);
+     mRoot.glDepthMask(mDepth);
 
-        // we can also, to save memory, delete/recreate
-        // the depth buffer each time. This is optional.
-        DistortedFramebuffer fbo = mRoot.getFramebuffer();
-        fbo.enableDepth(depth);
-        }
+     // we can also, to save memory, delete/recreate
+     // the depth buffer each time. This is optional.
+     DistortedFramebuffer fbo = mRoot.getFramebuffer();
+     if( fbo!=null ) fbo.enableDepth(mDepth);
+     }
+
+///////////////////////////////////////////////////////////////////////////////////////////////////
+
+   void setDepth(boolean depth)
+      {
+      mDepth = depth;
+      if( mRoot!=null ) setDepthPriv();
       }
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
@@ -161,6 +168,8 @@ class FBORenderer implements GLSurfaceView.Renderer
       mRoot = new DistortedNode(lisa, mEffects,new MeshFlat(1,1));
       mRoot.attach(grid,gridEffects,new MeshCubes(10,10,false));
 
+      setDepthPriv();
+
       mScreen.detachAll();
       mScreen.attach(mRoot);
 
