commit d57f3a145ee2793869fcef65bcc5c3ac77769fb0
Author: Leszek Koltunski <leszek@distoretedandroid.org>
Date:   Mon Jun 12 11:50:01 2017 +0100

    Further progress with Apps.

diff --git a/src/main/java/org/distorted/examples/deform/DeformRenderer.java b/src/main/java/org/distorted/examples/deform/DeformRenderer.java
index 6960860..39bd9b2 100644
--- a/src/main/java/org/distorted/examples/deform/DeformRenderer.java
+++ b/src/main/java/org/distorted/examples/deform/DeformRenderer.java
@@ -23,6 +23,10 @@ import javax.microedition.khronos.egl.EGLConfig;
 import javax.microedition.khronos.opengles.GL10;
 
 import org.distorted.library.effect.EffectName;
+import org.distorted.library.effect.MatrixEffectMove;
+import org.distorted.library.effect.MatrixEffectShear;
+import org.distorted.library.effect.VertexEffectDeform;
+import org.distorted.library.effect.VertexEffectDistort;
 import org.distorted.library.main.Distorted;
 import org.distorted.library.main.DistortedEffects;
 import org.distorted.library.main.DistortedScreen;
@@ -54,22 +58,21 @@ class DeformRenderer implements GLSurfaceView.Renderer
    private DistortedScreen mScreen;
    private Static3D touchPoint;
 
-   private Dynamic3D mReleasedDistortDynamic;
-   private Dynamic3D mMovingDistortDynamic;
    private Static3D[] vDistort;
-   private Dynamic3D mReleasedDeformDynamic;
-   private Dynamic3D mMovingDeformDynamic;
    private Static3D[] vDeform;
-   private Dynamic3D mReleasedShearDynamic;
-   private Dynamic3D mMovingShearDynamic;
    private Static3D[] vShear;
 
    private Static4D mRegion;
+   private Static3D mMove;
    private int scrHeight, scrWidth;
    private float mRadius;
 
    private EffectName mMode = EffectName.DISTORT;
-   private EffectName mLastEffect = EffectName.DISTORT;
+   private long mLastEffect = -1;
+
+   private MatrixEffectShear mMovingShear, mReleasedShear;
+   private VertexEffectDistort mMovingDistort, mReleasedDistort;
+   private VertexEffectDeform mMovingDeform, mReleasedDeform;
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
@@ -79,57 +82,67 @@ class DeformRenderer implements GLSurfaceView.Renderer
 
       stretchEffects = new DistortedEffects();
       mRegion = new Static4D(0,0,0,0);
+      mMove   = new Static3D(0,0,0);
 
       // DISTORT
-      mReleasedDistortDynamic = new Dynamic3D(NUM_VECTORS*500, 0.5f);
-      mReleasedDistortDynamic.setMode(Dynamic3D.MODE_PATH);
-      mMovingDistortDynamic = new Dynamic3D(0,0.5f);
-      mMovingDistortDynamic.setMode(Dynamic3D.MODE_PATH);
+      Dynamic3D releasedDistortDynamic = new Dynamic3D(NUM_VECTORS*500, 0.5f);
+      releasedDistortDynamic.setMode(Dynamic3D.MODE_PATH);
+      Dynamic3D movingDistortDynamic = new Dynamic3D(0,0.5f);
+      movingDistortDynamic.setMode(Dynamic3D.MODE_PATH);
 
       vDistort = new Static3D[NUM_VECTORS];
 
       for(int i=0; i<NUM_VECTORS; i++)
         {
         vDistort[i] = new Static3D(0,0,0);
-        mReleasedDistortDynamic.add(vDistort[i]);
+        releasedDistortDynamic.add(vDistort[i]);
         }
 
-      mMovingDistortDynamic.add(vDistort[0]);
+      movingDistortDynamic.add(vDistort[0]);
 
       // Deform
-      mReleasedDeformDynamic = new Dynamic3D(NUM_VECTORS*500, 0.5f);
-      mReleasedDeformDynamic.setMode(Dynamic3D.MODE_PATH);
-      mMovingDeformDynamic = new Dynamic3D(0,0.5f);
-      mMovingDeformDynamic.setMode(Dynamic3D.MODE_PATH);
+      Dynamic3D releasedDeformDynamic = new Dynamic3D(NUM_VECTORS*500, 0.5f);
+      releasedDeformDynamic.setMode(Dynamic3D.MODE_PATH);
+      Dynamic3D movingDeformDynamic = new Dynamic3D(0,0.5f);
+      movingDeformDynamic.setMode(Dynamic3D.MODE_PATH);
 
       vDeform = new Static3D[NUM_VECTORS];
 
       for(int i=0; i<NUM_VECTORS; i++)
         {
         vDeform[i] = new Static3D(0,0,0);
-        mReleasedDeformDynamic.add(vDeform[i]);
+        releasedDeformDynamic.add(vDeform[i]);
         }
 
-      mMovingDeformDynamic.add(vDeform[0]);
+      movingDeformDynamic.add(vDeform[0]);
 
       // Shear
-      mReleasedShearDynamic = new Dynamic3D(NUM_VECTORS*500, 0.5f);
-      mReleasedShearDynamic.setMode(Dynamic3D.MODE_PATH);
-      mMovingShearDynamic = new Dynamic3D(0,0.5f);
-      mMovingShearDynamic.setMode(Dynamic3D.MODE_PATH);
+      Dynamic3D releasedShearDynamic = new Dynamic3D(NUM_VECTORS*500, 0.5f);
+      releasedShearDynamic.setMode(Dynamic3D.MODE_PATH);
+      Dynamic3D movingShearDynamic = new Dynamic3D(0,0.5f);
+      movingShearDynamic.setMode(Dynamic3D.MODE_PATH);
 
       vShear = new Static3D[NUM_VECTORS];
 
       for(int i=0; i<NUM_VECTORS; i++)
         {
         vShear[i] = new Static3D(0,0,0);
-        mReleasedShearDynamic.add(vShear[i]);
+        releasedShearDynamic.add(vShear[i]);
         }
 
-      mMovingShearDynamic.add(vShear[0]);
+      movingShearDynamic.add(vShear[0]);
 
       mScreen = new DistortedScreen(mView);
       mScreen.setDebug(DistortedScreen.DEBUG_FPS);
+
+      mMovingDistort   = new VertexEffectDistort(movingDistortDynamic, touchPoint, mRegion);
+      mMovingDeform    = new VertexEffectDeform(movingDeformDynamic, touchPoint, mRegion);
+      mMovingShear     = new MatrixEffectShear(movingShearDynamic, touchPoint);
+      mReleasedDistort = new VertexEffectDistort(releasedDistortDynamic, touchPoint, mRegion);
+      mReleasedDeform  = new VertexEffectDeform(releasedDeformDynamic, touchPoint, mRegion);
+      mReleasedShear   = new MatrixEffectShear(releasedShearDynamic, touchPoint);
+
+      stretchEffects.apply(new MatrixEffectMove(mMove));
       }
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
@@ -190,8 +203,7 @@ class DeformRenderer implements GLSurfaceView.Renderer
      if( stretchTexture==null ) stretchTexture = new DistortedTexture(w,h);
      stretchTexture.setTexture(stretchBitmap);
 
-     stretchEffects.abortAllEffects();
-     stretchEffects.move( new Static3D(scrWidth/4,scrHeight/4,0) );
+     mMove.set(scrWidth/4,scrHeight/4,0);
 
      mScreen.detachAll();
      mScreen.attach(stretchTexture,stretchEffects,stretchMesh);
@@ -233,13 +245,16 @@ class DeformRenderer implements GLSurfaceView.Renderer
      switch(mMode)
        {
        case DISTORT: vDistort[0].set(0,0,0);
-                     mLastEffect = stretchEffects.distort( mMovingDistortDynamic, touchPoint, mRegion);
+                     stretchEffects.apply(mMovingDistort);
+                     mLastEffect = mMovingDeform.getID();
                      break;
        case DEFORM : vDeform[0].set(0,0,0);
-                     mLastEffect = stretchEffects.deform( mMovingDeformDynamic, touchPoint, mRegion);
+                     stretchEffects.apply(mMovingDeform);
+                     mLastEffect = mMovingDeform.getID();
                      break;
        case SHEAR  : vShear[0].set(0,0,0);
-                     mLastEffect = stretchEffects.shear(mMovingShearDynamic, touchPoint);
+                     stretchEffects.apply(mMovingShear);
+                     mLastEffect = mMovingShear.getID();
                      break;
        }
      }
@@ -263,7 +278,7 @@ class DeformRenderer implements GLSurfaceView.Renderer
 
    void up()
      {
-     stretchEffects.abortByName(mLastEffect);
+     stretchEffects.abortById(mLastEffect);
 
      float damp = -0.65f;
 
@@ -274,21 +289,21 @@ class DeformRenderer implements GLSurfaceView.Renderer
                        vDistort[i].set( vDistort[i-1].getX()*damp, vDistort[i-1].getY()*damp );
                        }
                      vDistort[NUM_VECTORS-1].set(0,0);
-                     stretchEffects.distort( mReleasedDistortDynamic, touchPoint, mRegion);
+                     stretchEffects.apply( mReleasedDistort);
                      break;
        case DEFORM : for(int i=1; i<NUM_VECTORS-1; i++)
                        {
                        vDeform[i].set( vDeform[i-1].getX()*damp, vDeform[i-1].getY()*damp );
                        }
                      vDeform[NUM_VECTORS-1].set(0,0);
-                     stretchEffects.deform( mReleasedDeformDynamic, touchPoint, mRegion);
+                     stretchEffects.apply( mReleasedDeform);
                      break;
        case SHEAR  : for(int i=1; i<NUM_VECTORS-1; i++)
                        {
                        vShear[i].set( vShear[i-1].getX()*damp, vShear[i-1].getY()*damp );
                        }
                      vShear[NUM_VECTORS-1].set(0,0);
-                     stretchEffects.shear(mReleasedShearDynamic, touchPoint);
+                     stretchEffects.apply(mReleasedShear);
                      break;
        }
      }
