commit 46ab4363f692a60a4dab9460c52b703e46919aa3
Author: Leszek Koltunski <leszek@distoretedandroid.org>
Date:   Fri Mar 31 16:52:36 2017 +0100

    1st attempt to restore internal variables in Multiblur.

diff --git a/src/main/java/org/distorted/examples/multiblur/MultiblurActivity.java b/src/main/java/org/distorted/examples/multiblur/MultiblurActivity.java
index 02a22e1..c040197 100644
--- a/src/main/java/org/distorted/examples/multiblur/MultiblurActivity.java
+++ b/src/main/java/org/distorted/examples/multiblur/MultiblurActivity.java
@@ -78,6 +78,40 @@ public class MultiblurActivity extends Activity implements SeekBar.OnSeekBarChan
       super.onDestroy();
       }
 
+///////////////////////////////////////////////////////////////////////////////////////////////////
+
+    @Override
+    public void onSaveInstanceState(Bundle savedInstanceState)
+      {
+      super.onSaveInstanceState(savedInstanceState);
+
+      MultiblurSurfaceView view = (MultiblurSurfaceView) this.findViewById(R.id.multiblurSurfaceView);
+      MultiblurRenderer renderer = view.getRenderer();
+
+      savedInstanceState.putBooleanArray("checkboxes", renderer.getChecked() );
+      }
+
+///////////////////////////////////////////////////////////////////////////////////////////////////
+
+    @Override
+    public void onRestoreInstanceState(Bundle savedInstanceState)
+      {
+      super.onRestoreInstanceState(savedInstanceState);
+
+      boolean[] checkboxes = savedInstanceState.getBooleanArray("checkboxes");
+
+      MultiblurSurfaceView view = (MultiblurSurfaceView) this.findViewById(R.id.multiblurSurfaceView);
+      MultiblurRenderer renderer = view.getRenderer();
+
+      if( checkboxes!=null )
+        {
+        for(int i=0; i<checkboxes.length; i++)
+          {
+          renderer.setChecked(i,checkboxes[i]);
+          }
+        }
+      }
+
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
     public void onProgressChanged(SeekBar bar, int progress, boolean fromUser)
@@ -113,14 +147,14 @@ public class MultiblurActivity extends Activity implements SeekBar.OnSeekBarChan
 
     switch(id)
       {
-      case R.id.multiblurCheckBox0  : sView.getRenderer().pressed(0,checked); break;
-      case R.id.multiblurCheckBox1  : sView.getRenderer().pressed(1,checked); break;
-      case R.id.multiblurCheckBox2  : sView.getRenderer().pressed(2,checked); break;
-      case R.id.multiblurCheckBox3  : sView.getRenderer().pressed(3,checked); break;
-      case R.id.multiblurCheckBox4  : sView.getRenderer().pressed(4,checked); break;
-      case R.id.multiblurCheckBox5  : sView.getRenderer().pressed(5,checked); break;
-      case R.id.multiblurCheckBox6  : sView.getRenderer().pressed(6,checked); break;
-      case R.id.multiblurCheckBox7  : sView.getRenderer().pressed(7,checked); break;
+      case R.id.multiblurCheckBox0  : sView.getRenderer().setChecked(0,checked); break;
+      case R.id.multiblurCheckBox1  : sView.getRenderer().setChecked(1,checked); break;
+      case R.id.multiblurCheckBox2  : sView.getRenderer().setChecked(2,checked); break;
+      case R.id.multiblurCheckBox3  : sView.getRenderer().setChecked(3,checked); break;
+      case R.id.multiblurCheckBox4  : sView.getRenderer().setChecked(4,checked); break;
+      case R.id.multiblurCheckBox5  : sView.getRenderer().setChecked(5,checked); break;
+      case R.id.multiblurCheckBox6  : sView.getRenderer().setChecked(6,checked); break;
+      case R.id.multiblurCheckBox7  : sView.getRenderer().setChecked(7,checked); break;
       }
     }
 }
diff --git a/src/main/java/org/distorted/examples/multiblur/MultiblurRenderer.java b/src/main/java/org/distorted/examples/multiblur/MultiblurRenderer.java
index 79619ef..bc8bd9f 100644
--- a/src/main/java/org/distorted/examples/multiblur/MultiblurRenderer.java
+++ b/src/main/java/org/distorted/examples/multiblur/MultiblurRenderer.java
@@ -73,6 +73,7 @@ class MultiblurRenderer implements GLSurfaceView.Renderer
     private DistortedScreen mScreen;
     private DynamicQuat mQuatInt1, mQuatInt2;
     private int mDistance;
+    private boolean[] mBlurStatus;
 
     Static4D mQuat1, mQuat2;
     int mScreenMin;
@@ -84,6 +85,7 @@ class MultiblurRenderer implements GLSurfaceView.Renderer
       mView = v;
       mDistance = -1;
 
+      mBlurStatus = new boolean[NUM_OBJECTS];
       mMoveDynamic= new Dynamic3D[NUM_OBJECTS];
       mMoveVector = new Static3D[NUM_OBJECTS];
       mEffects    = new DistortedEffects[NUM_OBJECTS];
@@ -95,12 +97,14 @@ class MultiblurRenderer implements GLSurfaceView.Renderer
         mMoveDynamic[i] = new Dynamic3D();
 
         mMoveDynamic[i].add(mMoveVector[i]);
+        mBlurStatus[i] = false;
         }
 
       mBlurDynamic= new Dynamic1D();
       mBlurVector = new Static1D(10);
       mBlurDynamic.add(mBlurVector);
 
+      mBlurStatus[0] = true;
       mEffects[0].blur(mBlurDynamic);
 
       MeshCubes mesh = new MeshCubes(1,1,false);
@@ -206,6 +210,13 @@ class MultiblurRenderer implements GLSurfaceView.Renderer
         }
       }
 
+///////////////////////////////////////////////////////////////////////////////////////////////////
+
+    int getDistance()
+      {
+      return mDistance;
+      }
+
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
     void setDistance(int distance)
@@ -215,6 +226,13 @@ class MultiblurRenderer implements GLSurfaceView.Renderer
       android.util.Log.e("renderer", "distance: "+distance);
       }
 
+///////////////////////////////////////////////////////////////////////////////////////////////////
+
+    int getRange()
+      {
+      return (int)mBlurVector.getX();
+      }
+
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
     void setRange(int range)
@@ -225,30 +243,39 @@ class MultiblurRenderer implements GLSurfaceView.Renderer
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
-   void pressed(int number, boolean checked)
+   boolean[] getChecked()
+     {
+     return mBlurStatus;
+     }
+
+///////////////////////////////////////////////////////////////////////////////////////////////////
+
+   void setChecked(int number, boolean checked)
      {
      if( number>=0 && number<=7 && mEffects!=null )
        {
        if( checked )
          {
-         long effectNum = mEffects[number].blur(mBlurDynamic);
-
-         if( effectNum<0 )
+         if( !mBlurStatus[number] )
            {
-           android.util.Log.e("renderer", "Error, failed to add BLUR effect, number: "+number );
+           mBlurStatus[number] = true;
+           mEffects[number].blur(mBlurDynamic);
            }
          else
            {
-           android.util.Log.e("renderer", "Successfully added BLUR effect, number: "+number );
+           android.util.Log.e("renderer", "Error, failed to add BLUR effect, number: "+number );
            }
          }
        else
          {
-         int numAborted = mEffects[number].abortEffects(EffectNames.BLUR);
-
-         if( numAborted!=1 )
+         if( mBlurStatus[number] )
+           {
+           mBlurStatus[number] = false;
+           mEffects[number].abortEffects(EffectNames.BLUR);
+           }
+         else
            {
-           android.util.Log.e("renderer", "Error, number: "+number+" unexpected number of effects aborted ("+numAborted+" - should have been 1)" );
+           android.util.Log.e("renderer", "Error, failed to remove BLUR effect, number: "+number );
            }
          }
        }
