commit f4e44230cb3eccfa0a2c140141aec2887761c4ef
Author: Leszek Koltunski <leszek@distorted.org>
Date:   Tue Aug 30 17:29:59 2016 +0100

    Preparation to make the WAVE effect fully 3D

diff --git a/src/main/java/org/distorted/examples/effects3d/Effects3DEffect.java b/src/main/java/org/distorted/examples/effects3d/Effects3DEffect.java
index 16463c7..598ad74 100644
--- a/src/main/java/org/distorted/examples/effects3d/Effects3DEffect.java
+++ b/src/main/java/org/distorted/examples/effects3d/Effects3DEffect.java
@@ -56,8 +56,10 @@ public class Effects3DEffect implements SeekBar.OnSeekBarChangeListener
 
   private Dynamic1D mDyn1;
   private Dynamic3D mDyn3;
+  private Dynamic4D mDyn4;
   private Static1D  mSta1;
   private Static3D  mSta3;
+  private Static4D  mSta4;
   private Dynamic4D mRegionDyn;
   private Static4D  mRegionSta;
   private Dynamic2D mCenterDyn;
@@ -71,11 +73,11 @@ public class Effects3DEffect implements SeekBar.OnSeekBarChangeListener
     switch(mName)
       {
       case DISTORT      :
-      case DEFORM       :
-      case WAVE         : return 3;
+      case DEFORM       : return 3;
 
       case CHROMA       :
-      case SMOOTH_CHROMA: return 4;
+      case SMOOTH_CHROMA:
+      case WAVE         : return 4;
 
       default           : return 1;
       }
@@ -92,7 +94,7 @@ public class Effects3DEffect implements SeekBar.OnSeekBarChangeListener
       case DEFORM : object.deform (mDyn3, mCenterDyn            ); break;
       case SINK   : object.sink   (mDyn1, mCenterDyn, mRegionDyn); break;
       case SWIRL  : object.swirl  (mDyn1, mCenterDyn, mRegionDyn); break;
-      case WAVE   : object.wave   (mDyn3, mCenterDyn, mRegionDyn); break;
+      case WAVE   : object.wave   (mDyn4, mCenterDyn, mRegionDyn); break;
 
       case ALPHA            : object.alpha     (mDyn1,        mRegionDyn, false); break;
       case SMOOTH_ALPHA     : object.alpha     (mDyn1,        mRegionDyn, true ); break;
@@ -133,7 +135,8 @@ public class Effects3DEffect implements SeekBar.OnSeekBarChangeListener
                               float x2 = (mInter[0]-50)*l2;
                               float y2 = (mInter[1]-50)*180 / 50;
                               float z2 = (mInter[2]-50)*l2;
-                              mSta3.set(x2,y2,z2);
+                              float w2 = (mInter[3]-50)*180 / 50;
+                              mSta4.set(x2,y2,z2,w2);
                               break;
       case SINK             : mSta1.set(mInter[0] > 50 ? 50.0f/(100.01f-mInter[0]) : mInter[0] / 50.0f);
                               break;
@@ -167,10 +170,14 @@ public class Effects3DEffect implements SeekBar.OnSeekBarChangeListener
     switch(mName)
       {
       case DISTORT          :
-      case DEFORM           :
+      case DEFORM           : mInter[0] = 50;
+                              mInter[1] = 50;
+                              mInter[2] = 50;
+                              break;
       case WAVE             : mInter[0] = 50;
                               mInter[1] = 50;
                               mInter[2] = 50;
+                              mInter[3] = 50;
                               break;
       case SINK             :
       case SWIRL            : mInter[0] = 50;
@@ -201,22 +208,27 @@ public class Effects3DEffect implements SeekBar.OnSeekBarChangeListener
     {
     String text = mName.name();
 
-    if( mName.getType()== EffectTypes.FRAGMENT )
+    if( mSta1 !=null )
       {
-      text+=(" "+((int)(mSta1.getX()*100))/100.0f);
+      int f1 = (int)((mSta1.getX()*100)/100.0f);
+      text += " "+f1;
       }
 
-    if( mDimension>=3 )
+    if( mSta3 !=null )
       {
       int f1 = (int)mSta3.getX();
       int f2 = (int)mSta3.getY();
       int f3 = (int)mSta3.getZ();
       text += " ("+f1+","+f2+","+f3+")";
       }
-    else if(mName.getType() == EffectTypes.VERTEX)
+
+    if( mSta4 !=null )
       {
-      float f1 = ((int)(mSta1.getX()*100))/100.0f;
-      text += " ("+f1+")";
+      int f1 = (int)mSta4.getX();
+      int f2 = (int)mSta4.getY();
+      int f3 = (int)mSta4.getZ();
+      int f4 = (int)mSta4.getW();
+      text += " ("+f1+","+f2+","+f3+","+f4+")";
       }
 
     mText.setText(text);
@@ -299,6 +311,13 @@ public class Effects3DEffect implements SeekBar.OnSeekBarChangeListener
     mAct = new WeakReference<>(act);
     mName = name;
 
+    mDyn1 = null;
+    mDyn3 = null;
+    mDyn4 = null;
+    mSta1 = null;
+    mSta3 = null;
+    mSta4 = null;
+
     mDimension = getDimension();
 
     switch(mDimension)
@@ -306,19 +325,26 @@ public class Effects3DEffect implements SeekBar.OnSeekBarChangeListener
       case 1 : mDyn1 = new Dynamic1D();
                mSta1 = new Static1D(0);
                mDyn1.add(mSta1);
-               mDyn3 = null;
                break;
       case 3 : mDyn3 = new Dynamic3D();
                mSta3 = new Static3D(0,0,0);
                mDyn3.add(mSta3);
-               mDyn1 = null;
                break;
-      case 4 : mDyn3 = new Dynamic3D();
-               mSta3 = new Static3D(0,0,0);
-               mDyn3.add(mSta3);
-               mDyn1 = new Dynamic1D();
-               mSta1 = new Static1D(0);
-               mDyn1.add(mSta1);
+      case 4 : if( mName == EffectNames.WAVE )
+                 {
+                 mDyn4 = new Dynamic4D();
+                 mSta4 = new Static4D(0,0,0,0);
+                 mDyn4.add(mSta4);
+                 }
+               else
+                 {
+                 mDyn3 = new Dynamic3D();
+                 mSta3 = new Static3D(0,0,0);
+                 mDyn3.add(mSta3);
+                 mDyn1 = new Dynamic1D();
+                 mSta1 = new Static1D(0);
+                 mDyn1.add(mSta1);
+                 }
                break;
       default: throw new RuntimeException("unsupported effect");
       }
