commit 8b7c0ab3e45f762cb7deab5830be8d7091377ae9
Author: Leszek Koltunski <leszek@distorted.org>
Date:   Fri Oct 21 16:00:09 2016 +0100

    Improve the Dynamics app (multi-dimensional noise)

diff --git a/src/main/java/org/distorted/examples/dynamic/DynamicActivity.java b/src/main/java/org/distorted/examples/dynamic/DynamicActivity.java
index c86e339..10b1515 100644
--- a/src/main/java/org/distorted/examples/dynamic/DynamicActivity.java
+++ b/src/main/java/org/distorted/examples/dynamic/DynamicActivity.java
@@ -35,29 +35,40 @@ import android.widget.SeekBar.OnSeekBarChangeListener;
 
 public class DynamicActivity extends Activity implements OnSeekBarChangeListener
     {
-    private SeekBar barD, barN;
     private TextView textD, textN;
-   
+    private int progress0, progress1, progress2;
+
 ///////////////////////////////////////////////////////////////////
     @Override
     protected void onCreate(Bundle savedInstanceState) 
       {
       super.onCreate(savedInstanceState);
-      setContentView(R.layout.interpolatorlayout);
-      
-      barD = (SeekBar)findViewById(R.id.interpolatorSeekDuration);
-      barD.setOnSeekBarChangeListener(this); 
-      textD = (TextView)findViewById(R.id.interpolatorTextDuration);
-      
-      barN = (SeekBar)findViewById(R.id.interpolatorSeekNoise);
-      barN.setOnSeekBarChangeListener(this); 
-      textN = (TextView)findViewById(R.id.interpolatorTextNoise);
-      
-      barD.setProgress(50);
-      textD.setText("Duration: 10 s");
-      
-      barN.setProgress(0);
-      textN.setText("Noise: 0.0");
+      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;
+
+
+      //textD.setText("Duration: 10 s");
+      //textN.setText("Noise: 0.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);
       }
 
 ///////////////////////////////////////////////////////////////////
@@ -66,7 +77,7 @@ public class DynamicActivity extends Activity implements OnSeekBarChangeListener
       {
       super.onResume();
       
-      GLSurfaceView mView = (GLSurfaceView) this.findViewById(R.id.interpolatorSurfaceView);
+      GLSurfaceView mView = (GLSurfaceView) this.findViewById(R.id.dynamicSurfaceView);
       mView.onResume();
       }
 
@@ -74,7 +85,7 @@ public class DynamicActivity extends Activity implements OnSeekBarChangeListener
     @Override
     protected void onPause() 
       {
-      GLSurfaceView mView = (GLSurfaceView) this.findViewById(R.id.interpolatorSurfaceView);
+      GLSurfaceView mView = (GLSurfaceView) this.findViewById(R.id.dynamicSurfaceView);
       mView.onPause();
          
       super.onPause();
@@ -148,20 +159,27 @@ public class DynamicActivity extends Activity implements OnSeekBarChangeListener
     
     public void onProgressChanged(SeekBar bar, int progress, boolean fromUser) 
       {
-      float v, t; 
-      int i;
-      
-      switch (bar.getId()) 
+      int id = bar.getId();
+
+      if( id == R.id.dynamicSeekDuration )
+        {
+        float v = progress*200;
+        int i = (int)(v/100);
+        float t = i/10.0f;
+        DynamicSurfaceView.setDuration((int)v);
+        textD.setText("Duration: "+(int)t+" s");
+        }
+      else
         {
-        case R.id.interpolatorSeekDuration: v = progress*200;
-                                            i = (int)(v/100);
-                                            t = i/10.0f;
-                                            DynamicSurfaceView.setDuration((int)v);
-                                            textD.setText("Duration: "+(int)t+" s");
-                                            break;
-        case R.id.interpolatorSeekNoise   : DynamicSurfaceView.setNoise(progress/100.0f);
-                                            textN.setText("Noise: "+(progress/100.f));
-                                            break;
+        switch(id)
+          {
+          case R.id.dynamicSeekNoise0  : progress0 = progress; break;
+          case R.id.dynamicSeekNoise1  : progress1 = progress; break;
+          case R.id.dynamicSeekNoise2  : progress2 = progress; break;
+          }
+
+        DynamicSurfaceView.setNoise(progress0/100.0f,progress1/100.0f,progress2/100.0f);
+        textN.setText("Noise: "+(progress0/100.f)+" "+(progress1/100.f)+" "+(progress2/100.f));
         }
       }
 
diff --git a/src/main/java/org/distorted/examples/dynamic/DynamicSurfaceView.java b/src/main/java/org/distorted/examples/dynamic/DynamicSurfaceView.java
index 0ee8816..01f2aac 100644
--- a/src/main/java/org/distorted/examples/dynamic/DynamicSurfaceView.java
+++ b/src/main/java/org/distorted/examples/dynamic/DynamicSurfaceView.java
@@ -43,11 +43,12 @@ public class DynamicSurfaceView extends GLSurfaceView
     public static final int DIM_2D   = 1; 
     public static final int DIM_3DXY = 2; 
     public static final int DIM_3DXZ = 3; 
-   
+
     private static final int NUM_INTERPOLATIONS= 100;
     private static final int MAX_VECTORS       =   6;
-   
-    private DynamicRenderer mRenderer;
+
+    private static final Object lock = new Object();
+
     private static int xDown,yDown;
     private static int mScrW, mScrH;
    
@@ -57,11 +58,10 @@ public class DynamicSurfaceView extends GLSurfaceView
     
     private static Paint mPaint;
     private static int moving;
-    private static Object lock = new Object();
     private static long mTime = 0;
     private static int mDuration;
     private static float mPosition;
-    private static float mNoise;
+    private static float mNoise0, mNoise1, mNoise2;
     
     private static int currentDim = DIM_2D;
     
@@ -88,18 +88,20 @@ public class DynamicSurfaceView extends GLSurfaceView
       moving    = -1;
       mDuration = 10000;
       mPosition = 0;
-      mNoise    = 0.0f;
-      
+      mNoise0   = 0.0f;
+      mNoise1   = 0.0f;
+      mNoise2   = 0.0f;
+
       di1D = new Dynamic1D(mDuration,0.5f);
-      p1N = new Static1D(mNoise);
+      p1N = new Static1D(mNoise0);
       di1D.setNoise(p1N);
       
       di2D = new Dynamic2D(mDuration,0.5f);
-      p2N = new Static2D(mNoise,mNoise);
+      p2N = new Static2D(mNoise0,mNoise1);
       di2D.setNoise(p2N);
       
       di3D = new Dynamic3D(mDuration,0.5f);
-      p3N = new Static3D(mNoise,mNoise,mNoise);
+      p3N = new Static3D(mNoise0,mNoise1,mNoise2);
       di3D.setNoise(p3N);
         
       if(!isInEditMode())
@@ -114,7 +116,7 @@ public class DynamicSurfaceView extends GLSurfaceView
           setEGLConfigChooser(8, 8, 8, 8, 16, 0);   
           }
         
-        mRenderer = new DynamicRenderer(this);
+        DynamicRenderer mRenderer = new DynamicRenderer(this);
         setRenderer(mRenderer);
         }
       }
@@ -149,13 +151,15 @@ public class DynamicSurfaceView extends GLSurfaceView
 
 ///////////////////////////////////////////////////////////////////
 
-    public static void setNoise(float noise)
+    public static void setNoise(float noise0, float noise1, float noise2)
       {
-      mNoise = noise;
+      mNoise0 = noise0;
+      mNoise1 = noise1;
+      mNoise2 = noise2;
 
-      p1N.set(mNoise);
-      p2N.set(mNoise,mNoise);
-      p3N.set(mNoise,mNoise,mNoise);
+      p1N.set(mNoise0);
+      p2N.set(mNoise0,mNoise1);
+      p3N.set(mNoise0,mNoise1,mNoise2);
 
       di1D.setNoise(p1N);
       di2D.setNoise(p2N);
diff --git a/src/main/res/layout/dynamicslayout.xml b/src/main/res/layout/dynamicslayout.xml
new file mode 100644
index 0000000..72fcf60
--- /dev/null
+++ b/src/main/res/layout/dynamicslayout.xml
@@ -0,0 +1,178 @@
+<?xml version="1.0" encoding="utf-8"?>
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    android:layout_width="fill_parent"
+    android:layout_height="fill_parent"
+    android:layout_gravity="fill_horizontal"
+    android:gravity="fill_horizontal"
+    android:orientation="vertical" >
+
+    <org.distorted.examples.dynamic.DynamicSurfaceView
+        android:id="@+id/dynamicSurfaceView"
+        android:layout_width="fill_parent"
+        android:layout_height="0dp"
+        android:layout_weight="1" />
+
+        <RadioGroup
+            android:id="@+id/radioGroup2"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:gravity="fill_horizontal"
+            android:orientation="horizontal"
+            android:paddingBottom="5dp"
+            android:paddingTop="5dp"
+            android:weightSum="1.0" >
+
+            <RadioButton
+                android:id="@+id/dynamic1D"
+                android:layout_width="fill_parent"
+                android:layout_height="wrap_content"
+                android:layout_weight="0.25"
+                android:onClick="Dim1D"
+                android:text="@string/dim1D" />
+
+            <RadioButton
+                android:id="@+id/dynamic2D"
+                android:layout_width="fill_parent"
+                android:layout_height="wrap_content"
+                android:layout_weight="0.25"
+                android:checked="true"
+                android:onClick="Dim2D"
+                android:text="@string/dim2D" />
+
+            <RadioButton
+                android:id="@+id/dynamic3DXY"
+                android:layout_width="fill_parent"
+                android:layout_height="wrap_content"
+                android:layout_weight="0.25"
+                android:onClick="Dim3DXY"
+                android:text="@string/dim3DXY" />
+
+            <RadioButton
+                android:id="@+id/dynamic3DXZ"
+                android:layout_width="fill_parent"
+                android:layout_height="wrap_content"
+                android:layout_weight="0.25"
+                android:onClick="Dim3DXZ"
+                android:text="@string/dim3DXZ" />
+
+        </RadioGroup>
+
+        <RadioGroup
+            android:id="@+id/radioGroup1"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:orientation="horizontal"
+            android:paddingRight="20dp" >
+
+            <RadioButton
+                android:id="@+id/dynamicLoopButton"
+                android:layout_width="wrap_content"
+                android:layout_height="wrap_content"
+                android:checked="true"
+                android:onClick="Loop"
+                android:text="@string/loop" />
+
+            <RadioButton
+                android:id="@+id/dynamicPathButton"
+                android:layout_width="wrap_content"
+                android:layout_height="wrap_content"
+                android:checked="false"
+                android:onClick="Path"
+                android:text="@string/path" />
+
+            <RadioButton
+                android:id="@+id/dynamicJumpButton"
+                android:layout_width="wrap_content"
+                android:layout_height="wrap_content"
+                android:checked="false"
+                android:onClick="Jump"
+                android:text="@string/jump" />
+
+        </RadioGroup>
+
+    <LinearLayout
+        android:id="@+id/linearLayout1"
+        android:layout_width="fill_parent"
+        android:layout_height="80dp"
+        android:layout_gravity="center_vertical"
+        android:gravity="center|fill_horizontal" >
+
+        <TableLayout
+            android:layout_width="wrap_content"
+            android:layout_height="match_parent"
+            android:layout_gravity="center_vertical"
+            android:layout_weight="15"
+            android:gravity="center_vertical" >
+
+            <TableRow
+                android:id="@+id/tableRow1"
+                android:layout_width="wrap_content"
+                android:layout_height="wrap_content"
+                android:layout_gravity="center_vertical"
+                android:paddingBottom="5dp"
+                android:paddingTop="5dp" >
+
+                <TextView
+                    android:id="@+id/dynamicTextDuration"
+                    android:layout_width="wrap_content"
+                    android:layout_height="wrap_content"
+                    android:layout_gravity="center_vertical"
+                    android:layout_weight="5"
+                    android:paddingLeft="10dp"
+                    android:text="@string/duration"
+                    android:textAppearance="?android:attr/textAppearanceMedium"
+                    android:textSize="12sp" />
+
+                <SeekBar
+                    android:id="@+id/dynamicSeekDuration"
+                    android:layout_width="match_parent"
+                    android:layout_height="wrap_content"
+                    android:layout_weight="12"
+                    android:paddingLeft="5dp"
+                    android:paddingRight="10dp" />
+            </TableRow>
+
+            <TableRow
+                android:id="@+id/tableRow2"
+                android:layout_width="wrap_content"
+                android:layout_height="wrap_content"
+                android:paddingBottom="5dp"
+                android:paddingTop="5dp" >
+
+                <TextView
+                    android:id="@+id/dynamicTextNoise"
+                    android:layout_width="wrap_content"
+                    android:layout_height="wrap_content"
+                    android:layout_gravity="center_vertical"
+                    android:layout_weight="5"
+                    android:paddingLeft="10dp"
+                    android:text="@string/noise"
+                    android:textAppearance="?android:attr/textAppearanceMedium"
+                    android:textSize="12sp" />
+
+                <SeekBar
+                    android:id="@+id/dynamicSeekNoise0"
+                    android:layout_width="match_parent"
+                    android:layout_height="wrap_content"
+                    android:layout_weight="12"
+                    android:paddingLeft="5dp"
+                    android:paddingRight="10dp" />
+                <SeekBar
+                    android:id="@+id/dynamicSeekNoise1"
+                    android:layout_width="match_parent"
+                    android:layout_height="wrap_content"
+                    android:layout_weight="12"
+                    android:paddingLeft="5dp"
+                    android:paddingRight="10dp" />
+                <SeekBar
+                    android:id="@+id/dynamicSeekNoise2"
+                    android:layout_width="match_parent"
+                    android:layout_height="wrap_content"
+                    android:layout_weight="12"
+                    android:paddingLeft="5dp"
+                    android:paddingRight="10dp" />
+            </TableRow>
+        </TableLayout>
+    </LinearLayout>
+
+</LinearLayout>
diff --git a/src/main/res/layout/interpolatorlayout.xml b/src/main/res/layout/interpolatorlayout.xml
deleted file mode 100644
index 2bb8770..0000000
--- a/src/main/res/layout/interpolatorlayout.xml
+++ /dev/null
@@ -1,164 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
-    android:layout_width="fill_parent"
-    android:layout_height="fill_parent"
-    android:layout_gravity="fill_horizontal"
-    android:gravity="fill_horizontal"
-    android:orientation="vertical" >
-
-    <org.distorted.examples.dynamic.DynamicSurfaceView
-        android:id="@+id/interpolatorSurfaceView"
-        android:layout_width="fill_parent"
-        android:layout_height="0dp"
-        android:layout_weight="1" />
-
-        <RadioGroup
-            android:id="@+id/radioGroup2"
-            android:layout_width="wrap_content"
-            android:layout_height="wrap_content"
-            android:gravity="fill_horizontal"
-            android:orientation="horizontal"
-            android:paddingBottom="5dp"
-            android:paddingTop="5dp"
-            android:weightSum="1.0" >
-
-            <RadioButton
-                android:id="@+id/interpolator1D"
-                android:layout_width="fill_parent"
-                android:layout_height="wrap_content"
-                android:layout_weight="0.25"
-                android:onClick="Dim1D"
-                android:text="@string/dim1D" />
-
-            <RadioButton
-                android:id="@+id/interpolator2D"
-                android:layout_width="fill_parent"
-                android:layout_height="wrap_content"
-                android:layout_weight="0.25"
-                android:checked="true"
-                android:onClick="Dim2D"
-                android:text="@string/dim2D" />
-
-            <RadioButton
-                android:id="@+id/interpolator3DXY"
-                android:layout_width="fill_parent"
-                android:layout_height="wrap_content"
-                android:layout_weight="0.25"
-                android:onClick="Dim3DXY"
-                android:text="@string/dim3DXY" />
-
-            <RadioButton
-                android:id="@+id/interpolator3DXZ"
-                android:layout_width="fill_parent"
-                android:layout_height="wrap_content"
-                android:layout_weight="0.25"
-                android:onClick="Dim3DXZ"
-                android:text="@string/dim3DXZ" />
-
-        </RadioGroup>
-
-        <RadioGroup
-            android:id="@+id/radioGroup1"
-            android:layout_width="wrap_content"
-            android:layout_height="wrap_content"
-            android:orientation="horizontal"
-            android:paddingRight="20dp" >
-
-            <RadioButton
-                android:id="@+id/interpolatorLoopButton"
-                android:layout_width="wrap_content"
-                android:layout_height="wrap_content"
-                android:checked="true"
-                android:onClick="Loop"
-                android:text="@string/loop" />
-
-            <RadioButton
-                android:id="@+id/interpolatorPathButton"
-                android:layout_width="wrap_content"
-                android:layout_height="wrap_content"
-                android:checked="false"
-                android:onClick="Path"
-                android:text="@string/path" />
-
-            <RadioButton
-                android:id="@+id/interpolatorJumpButton"
-                android:layout_width="wrap_content"
-                android:layout_height="wrap_content"
-                android:checked="false"
-                android:onClick="Jump"
-                android:text="@string/jump" />
-
-        </RadioGroup>
-
-    <LinearLayout
-        android:id="@+id/linearLayout1"
-        android:layout_width="fill_parent"
-        android:layout_height="80dp"
-        android:layout_gravity="center_vertical"
-        android:gravity="center|fill_horizontal" >
-
-        <TableLayout
-            android:layout_width="wrap_content"
-            android:layout_height="match_parent"
-            android:layout_gravity="center_vertical"
-            android:layout_weight="15"
-            android:gravity="center_vertical" >
-
-            <TableRow
-                android:id="@+id/tableRow1"
-                android:layout_width="wrap_content"
-                android:layout_height="wrap_content"
-                android:layout_gravity="center_vertical"
-                android:paddingBottom="5dp"
-                android:paddingTop="5dp" >
-
-                <TextView
-                    android:id="@+id/interpolatorTextDuration"
-                    android:layout_width="wrap_content"
-                    android:layout_height="wrap_content"
-                    android:layout_gravity="center_vertical"
-                    android:layout_weight="5"
-                    android:paddingLeft="10dp"
-                    android:text="@string/duration"
-                    android:textAppearance="?android:attr/textAppearanceMedium"
-                    android:textSize="12sp" />
-
-                <SeekBar
-                    android:id="@+id/interpolatorSeekDuration"
-                    android:layout_width="match_parent"
-                    android:layout_height="wrap_content"
-                    android:layout_weight="12"
-                    android:paddingLeft="5dp"
-                    android:paddingRight="10dp" />
-            </TableRow>
-
-            <TableRow
-                android:id="@+id/tableRow2"
-                android:layout_width="wrap_content"
-                android:layout_height="wrap_content"
-                android:paddingBottom="5dp"
-                android:paddingTop="5dp" >
-
-                <TextView
-                    android:id="@+id/interpolatorTextNoise"
-                    android:layout_width="wrap_content"
-                    android:layout_height="wrap_content"
-                    android:layout_gravity="center_vertical"
-                    android:layout_weight="5"
-                    android:paddingLeft="10dp"
-                    android:text="@string/noise"
-                    android:textAppearance="?android:attr/textAppearanceMedium"
-                    android:textSize="12sp" />
-
-                <SeekBar
-                    android:id="@+id/interpolatorSeekNoise"
-                    android:layout_width="match_parent"
-                    android:layout_height="wrap_content"
-                    android:layout_weight="12"
-                    android:paddingLeft="5dp"
-                    android:paddingRight="10dp" />
-            </TableRow>
-        </TableLayout>
-    </LinearLayout>
-
-</LinearLayout>
