commit 06366d128b6060b6ffbe9299fffbf56d3dd25e56
Author: Leszek Koltunski <leszek@distoretedandroid.org>
Date:   Mon Jun 12 16:18:31 2017 +0100

    Progress with the last 2 APPs.

diff --git a/src/main/java/org/distorted/examples/effects3d/Effects3DEffect.java b/src/main/java/org/distorted/examples/effects3d/Effects3DEffect.java
index 51a4730..a1c19af 100644
--- a/src/main/java/org/distorted/examples/effects3d/Effects3DEffect.java
+++ b/src/main/java/org/distorted/examples/effects3d/Effects3DEffect.java
@@ -24,8 +24,25 @@ import android.widget.SeekBar;
 import android.widget.TextView;
 
 import org.distorted.examples.R;
+import org.distorted.library.effect.Effect;
 import org.distorted.library.effect.EffectName;
 import org.distorted.library.effect.EffectType;
+import org.distorted.library.effect.FragmentEffectAlpha;
+import org.distorted.library.effect.FragmentEffectBrightness;
+import org.distorted.library.effect.FragmentEffectChroma;
+import org.distorted.library.effect.FragmentEffectContrast;
+import org.distorted.library.effect.FragmentEffectSaturation;
+import org.distorted.library.effect.MatrixEffectMove;
+import org.distorted.library.effect.MatrixEffectQuaternion;
+import org.distorted.library.effect.MatrixEffectRotate;
+import org.distorted.library.effect.MatrixEffectScale;
+import org.distorted.library.effect.MatrixEffectShear;
+import org.distorted.library.effect.VertexEffectDeform;
+import org.distorted.library.effect.VertexEffectDistort;
+import org.distorted.library.effect.VertexEffectPinch;
+import org.distorted.library.effect.VertexEffectSink;
+import org.distorted.library.effect.VertexEffectSwirl;
+import org.distorted.library.effect.VertexEffectWave;
 import org.distorted.library.main.DistortedEffects;
 import org.distorted.library.type.Dynamic1D;
 import org.distorted.library.type.Dynamic2D;
@@ -79,33 +96,39 @@ class Effects3DEffect implements SeekBar.OnSeekBarChangeListener
 
   void apply(DistortedEffects effects)
     {
+    Effect effect=null;
+
     switch(mName)
       {
-      case ROTATE           : mId = effects.rotate    (mDyn4, mCenterDyn); break;
-      case QUATERNION       : mId = effects.quaternion(mDyn4, mCenterDyn); break;
-      case MOVE             : mId = effects.move      (mDyn3)            ; break;
-      case SCALE            : mId = effects.scale     (mDyn3)            ; break;
-      case SHEAR            : mId = effects.shear     (mDyn3, mCenterDyn); break;
-
-      case DISTORT          : mId = effects.distort   (mDyn3, mCenterDyn, mRegionDyn); break;
-      case DEFORM           : mId = effects.deform    (mDyn3, mCenterDyn, mRegionDyn); break;
-      case SINK             : mId = effects.sink      (mDyn1, mCenterDyn, mRegionDyn); break;
-      case PINCH            : mId = effects.pinch     (mDyn2, mCenterDyn, mRegionDyn); break;
-      case SWIRL            : mId = effects.swirl     (mDyn1, mCenterDyn, mRegionDyn); break;
-      case WAVE             : mId = effects.wave      (mDyn5, mCenterDyn, mRegionDyn); break;
-
-      case ALPHA            : mId = effects.alpha     (mDyn1,        mRegionDyn, false); break;
-      case SMOOTH_ALPHA     : mId = effects.alpha     (mDyn1,        mRegionDyn, true ); break;
-      case CHROMA           : mId = effects.chroma    (mDyn1, mDyn3, mRegionDyn, false); break;
-      case SMOOTH_CHROMA    : mId = effects.chroma    (mDyn1, mDyn3, mRegionDyn, true ); break;
-      case BRIGHTNESS       : mId = effects.brightness(mDyn1,        mRegionDyn, false); break;
-      case SMOOTH_BRIGHTNESS: mId = effects.brightness(mDyn1,        mRegionDyn, true ); break;
-      case SATURATION       : mId = effects.saturation(mDyn1,        mRegionDyn, false); break;
-      case SMOOTH_SATURATION: mId = effects.saturation(mDyn1,        mRegionDyn, true ); break;
-      case CONTRAST         : mId = effects.contrast  (mDyn1,        mRegionDyn, false); break;
-      case SMOOTH_CONTRAST  : mId = effects.contrast  (mDyn1,        mRegionDyn, true ); break;
-
-      default: mId = -1;
+      case ROTATE           : effect = new MatrixEffectRotate(mDyn4, mCenterDyn); break;
+      case QUATERNION       : effect = new MatrixEffectQuaternion(mDyn4, mCenterDyn); break;
+      case MOVE             : effect = new MatrixEffectMove(mDyn3)            ; break;
+      case SCALE            : effect = new MatrixEffectScale(mDyn3)            ; break;
+      case SHEAR            : effect = new MatrixEffectShear(mDyn3, mCenterDyn); break;
+
+      case DISTORT          : effect = new VertexEffectDistort(mDyn3, mCenterDyn, mRegionDyn); break;
+      case DEFORM           : effect = new VertexEffectDeform(mDyn3, mCenterDyn, mRegionDyn); break;
+      case SINK             : effect = new VertexEffectSink(mDyn1, mCenterDyn, mRegionDyn); break;
+      case PINCH            : effect = new VertexEffectPinch(mDyn2, mCenterDyn, mRegionDyn); break;
+      case SWIRL            : effect = new VertexEffectSwirl(mDyn1, mCenterDyn, mRegionDyn); break;
+      case WAVE             : effect = new VertexEffectWave(mDyn5, mCenterDyn, mRegionDyn); break;
+
+      case ALPHA            : effect = new FragmentEffectAlpha(mDyn1,        mRegionDyn, false); break;
+      case SMOOTH_ALPHA     : effect = new FragmentEffectAlpha     (mDyn1,        mRegionDyn, true ); break;
+      case CHROMA           : effect = new FragmentEffectChroma(mDyn1, mDyn3, mRegionDyn, false); break;
+      case SMOOTH_CHROMA    : effect = new FragmentEffectChroma    (mDyn1, mDyn3, mRegionDyn, true ); break;
+      case BRIGHTNESS       : effect = new FragmentEffectBrightness(mDyn1,        mRegionDyn, false); break;
+      case SMOOTH_BRIGHTNESS: effect = new FragmentEffectBrightness(mDyn1,        mRegionDyn, true ); break;
+      case SATURATION       : effect = new FragmentEffectSaturation(mDyn1,        mRegionDyn, false); break;
+      case SMOOTH_SATURATION: effect = new FragmentEffectSaturation(mDyn1,        mRegionDyn, true ); break;
+      case CONTRAST         : effect = new FragmentEffectContrast(mDyn1,        mRegionDyn, false); break;
+      case SMOOTH_CONTRAST  : effect = new FragmentEffectContrast  (mDyn1,        mRegionDyn, true ); break;
+      }
+
+    if( effect!=null )
+      {
+      effects.apply(effect);
+      mId = effect.getID();
       }
     }
 
diff --git a/src/main/java/org/distorted/examples/effects3d/Effects3DRenderer.java b/src/main/java/org/distorted/examples/effects3d/Effects3DRenderer.java
index f16815d..07c6620 100644
--- a/src/main/java/org/distorted/examples/effects3d/Effects3DRenderer.java
+++ b/src/main/java/org/distorted/examples/effects3d/Effects3DRenderer.java
@@ -24,17 +24,18 @@ import android.graphics.BitmapFactory;
 import android.opengl.GLSurfaceView;
 
 import org.distorted.examples.R;
+import org.distorted.library.effect.EffectName;
+import org.distorted.library.effect.EffectType;
+import org.distorted.library.effect.MatrixEffectMove;
+import org.distorted.library.effect.MatrixEffectQuaternion;
+import org.distorted.library.effect.MatrixEffectScale;
 import org.distorted.library.main.Distorted;
 import org.distorted.library.main.DistortedEffects;
 import org.distorted.library.main.DistortedNode;
 import org.distorted.library.main.DistortedScreen;
 import org.distorted.library.main.DistortedTexture;
-import org.distorted.library.EffectNames;
 import org.distorted.library.main.MeshFlat;
 import org.distorted.library.main.MeshObject;
-import org.distorted.library.EffectTypes;
-import org.distorted.library.type.Dynamic3D;
-import org.distorted.library.type.DynamicQuat;
 import org.distorted.library.type.Static3D;
 import org.distorted.library.type.Static4D;
 
@@ -53,16 +54,11 @@ class Effects3DRenderer implements GLSurfaceView.Renderer
 
     private GLSurfaceView mView;
     private DistortedTexture mObjectTexture, mBackgroundTexture, mCenterTexture, mRegionTexture;
-    private DistortedEffects mObjectEffects, mBackgroundEffects, mCenterEffects, mRegionEffects;
     private DistortedScreen mScreen;
     private DistortedNode mCenterNode, mRegionNode;
-    private int mObjWidth, mObjHeight, mObjDepth;
-    private DynamicQuat mQuatInt1, mQuatInt2;
-
-    private Dynamic3D mCenterInter, mRegionInter;
-    private Static3D mCenterPoint, mRegionPoint;
-    private Dynamic3D mRegionScaleInter;
-    private Static3D mRegionScalePoint;
+    private int mObjWidth, mObjHeight;
+    private Static3D mCenterPoint, mRegionPoint, mRegionScalePoint;
+    private Static3D mRotateCen, mMoveObject, mMoveCenter, mScaleCenter, mMoveRegion, mMoveBackground, mScaleBackground;
 
     private float mFactorObj, mFactorReg;
 
@@ -79,50 +75,78 @@ class Effects3DRenderer implements GLSurfaceView.Renderer
 
       Effects3DActivity act = (Effects3DActivity)v.getContext();
 
+      mRotateCen      = new Static3D(0,0,0);
+      mMoveObject     = new Static3D(0,0,0);
+      mMoveCenter     = new Static3D(0,0,0);
+      mScaleCenter    = new Static3D(1,1,1);
+      mMoveRegion     = new Static3D(0,0,0);
+      mMoveBackground = new Static3D(0,0,0);
+      mScaleBackground= new Static3D(1,1,1);
+
       mObjectTexture     = act.getTexture();
-      mObjectEffects     = act.getEffects();
       mBackgroundTexture = new DistortedTexture(100,100);
       mCenterTexture     = new DistortedTexture(100,100);
       mRegionTexture     = new DistortedTexture(100,100);
-      mBackgroundEffects = new DistortedEffects();
-      mCenterEffects     = new DistortedEffects();
-      mRegionEffects     = new DistortedEffects();
+
+      DistortedEffects objectEffects     = act.getEffects();
+      DistortedEffects backgroundEffects = new DistortedEffects();
+      DistortedEffects centerEffects     = new DistortedEffects();
+      DistortedEffects regionEffects     = new DistortedEffects();
 
       MeshObject meshO   = act.getMesh();
       MeshFlat quad      = new MeshFlat(1,1);
 
       mObjWidth = mObjectTexture.getWidth();
       mObjHeight= mObjectTexture.getHeight();
-      mObjDepth = mObjectTexture.getDepth(meshO);
+      int objDepth = mObjectTexture.getDepth(meshO);
 
       mQuat1 = new Static4D(0,0,0,1);  // unity
       mQuat2 = new Static4D(0,0,0,1);  // quaternions
 
-      mQuatInt1 = new DynamicQuat(0,0.5f);
-      mQuatInt2 = new DynamicQuat(0,0.5f);
-
-      mQuatInt1.add(mQuat1);
-      mQuatInt2.add(mQuat2);
-
-      mCenterInter= new Dynamic3D();
       mCenterPoint= new Static3D(0,0,0);
-      mCenterInter.add(mCenterPoint);
-
-      mRegionInter= new Dynamic3D();
       mRegionPoint= new Static3D(0,0,0);
-      mRegionInter.add(mRegionPoint);
-
-      mRegionScaleInter = new Dynamic3D();
       mRegionScalePoint = new Static3D(0,0,0);
-      mRegionScaleInter.add(mRegionScalePoint);
 
-      mCenterNode = new DistortedNode(mCenterTexture, mCenterEffects, quad);
-      mRegionNode = new DistortedNode(mRegionTexture, mRegionEffects, quad);
+      mCenterNode = new DistortedNode(mCenterTexture, centerEffects, quad);
+      mRegionNode = new DistortedNode(mRegionTexture, regionEffects, quad);
 
       mScreen = new DistortedScreen(mView);
       mScreen.setProjection(FOV, NEAR);
-      mScreen.attach(mBackgroundTexture, mBackgroundEffects, quad );
-      mScreen.attach(mObjectTexture    , mObjectEffects    , meshO);
+      mScreen.attach(mBackgroundTexture, backgroundEffects, quad );
+      mScreen.attach(mObjectTexture    , objectEffects    , meshO);
+
+      int regionSize = mRegionTexture.getWidth();
+      Static3D rotateObj = new Static3D( (float)mObjWidth/2, (float)mObjHeight/2, -(float)objDepth/2 );
+      mRotateCen = new Static3D(0 ,0, 0);
+
+      MatrixEffectQuaternion quat1obj = new MatrixEffectQuaternion(mQuat1,  rotateObj);
+      MatrixEffectQuaternion quat2obj = new MatrixEffectQuaternion(mQuat2,  rotateObj);
+      MatrixEffectQuaternion quat1cen = new MatrixEffectQuaternion(mQuat1, mRotateCen);
+      MatrixEffectQuaternion quat2cen = new MatrixEffectQuaternion(mQuat2, mRotateCen);
+      MatrixEffectMove centerMove = new MatrixEffectMove(mCenterPoint);
+
+      objectEffects.apply( new MatrixEffectMove(mMoveObject));
+      objectEffects.apply( new MatrixEffectScale(mFactorObj) );
+      objectEffects.apply(quat1obj);
+      objectEffects.apply(quat2obj);
+
+      centerEffects.apply(quat1cen);
+      centerEffects.apply(quat2cen);
+      centerEffects.apply( new MatrixEffectMove(mMoveCenter) );
+      centerEffects.apply( centerMove );
+      centerEffects.apply( new MatrixEffectScale(mScaleCenter) );
+
+      regionEffects.apply(quat1cen);
+      regionEffects.apply(quat2cen);
+      regionEffects.apply( new MatrixEffectMove(mMoveRegion) );
+      regionEffects.apply( centerMove );
+      regionEffects.apply( new MatrixEffectMove(mRegionPoint) );
+      regionEffects.apply( new MatrixEffectScale(mRegionScalePoint) );
+      regionEffects.apply( new MatrixEffectMove(new Static3D( -regionSize/2 , -regionSize/2 , 0)) );
+
+      // quite tricky: move the background exactly to the FAR plane! (see DistortedOutputSurface.setProjection() )
+      backgroundEffects.apply(new MatrixEffectMove(mMoveBackground) );
+      backgroundEffects.apply(new MatrixEffectScale(mScaleBackground) );
       }
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
@@ -175,11 +199,6 @@ class Effects3DRenderer implements GLSurfaceView.Renderer
       {
       mScreenMin = width<height ? width:height;
 
-      mObjectEffects.abortEffects(EffectTypes.MATRIX);
-      mBackgroundEffects.abortEffects(EffectTypes.MATRIX);
-      mCenterEffects.abortEffects(EffectTypes.MATRIX);
-      mRegionEffects.abortEffects(EffectTypes.MATRIX);
-
       float factorCen;
       int centerSize = mCenterTexture.getWidth();
       int regionSize = mRegionTexture.getWidth();
@@ -198,44 +217,23 @@ class Effects3DRenderer implements GLSurfaceView.Renderer
       Effects3DActivity act = (Effects3DActivity)mView.getContext();
       mCenterPoint.set(mFactorObj*act.getCenterX(),mFactorObj*act.getCenterY(),0);
       mRegionPoint.set(mFactorObj*act.getRegionX(),mFactorObj*act.getRegionY(),0);
-
       mFactorReg = 2*mFactorObj*act.getRegionR()/regionSize;
       mRegionScalePoint.set(mFactorReg,mFactorReg,mFactorReg);
+      mMoveObject.set( (width-mFactorObj*mObjWidth)/2 , (height-mFactorObj*mObjHeight)/2 , 0 );
+      mRotateCen.set(width/2,height/2, 0);
 
-      Static3D rotateObj = new Static3D( (float)mObjWidth/2, (float)mObjHeight/2, -(float)mObjDepth/2 );
-
-      mObjectEffects.move( new Static3D( (width-mFactorObj*mObjWidth)/2 , (height-mFactorObj*mObjHeight)/2 , 0) );
-      mObjectEffects.scale(mFactorObj);
-      mObjectEffects.quaternion(mQuatInt1, rotateObj);
-      mObjectEffects.quaternion(mQuatInt2, rotateObj);
-
-      Static3D rotateCen = new Static3D(width/2,height/2, 0);
-
-      mCenterEffects.quaternion(mQuatInt1, rotateCen);
-      mCenterEffects.quaternion(mQuatInt2, rotateCen);
-
-      mCenterEffects.move( new Static3D( (width -factorCen*centerSize-mFactorObj*mObjWidth )/2 ,
-                                  (height-factorCen*centerSize-mFactorObj*mObjHeight)/2 , 15) );
-      mCenterEffects.move(mCenterInter);
-      mCenterEffects.scale(factorCen);
-
-      mRegionEffects.quaternion(mQuatInt1, rotateCen);
-      mRegionEffects.quaternion(mQuatInt2, rotateCen);
-
-      mRegionEffects.move( new Static3D( (width -mFactorObj*mObjWidth )/2 ,
-                                  (height-mFactorObj*mObjHeight)/2 , 12) );
-      mRegionEffects.move(mCenterInter);
-      mRegionEffects.move(mRegionInter);
-      mRegionEffects.scale(mRegionScaleInter);
-      mRegionEffects.move( new Static3D( -regionSize/2 , -regionSize/2 , 0) );
+      mMoveCenter.set( (width -factorCen*centerSize-mFactorObj*mObjWidth )/2 ,
+                       (height-factorCen*centerSize-mFactorObj*mObjHeight)/2 , 15 );
+      mScaleCenter.set(factorCen,factorCen,factorCen);
+      mMoveRegion.set( (width -mFactorObj*mObjWidth )/2 ,(height-mFactorObj*mObjHeight)/2 , 12 );
 
       int backgroundSize = mBackgroundTexture.getWidth();
       float factorBackX = ((float)width)/backgroundSize;
       float factorBackY = ((float)height)/backgroundSize;
 
       // quite tricky: move the background exactly to the FAR plane! (see DistortedOutputSurface.setProjection() )
-      mBackgroundEffects.move(new Static3D( -width/2, -height/2, -0.9f*height*(1.0f-NEAR)/(2.0f*(float)Math.tan(FOV*Math.PI/360))) );
-      mBackgroundEffects.scale(new Static3D(2*factorBackX, 2*factorBackY, 1.0f) );
+      mMoveBackground.set( -width/2, -height/2, -0.9f*height*(1.0f-NEAR)/(2.0f*(float)Math.tan(FOV*Math.PI/360)) );
+      mScaleBackground.set( 2*factorBackX, 2*factorBackY, 1.0f );
 
       mScreen.resize(width, height);
       }
@@ -274,13 +272,13 @@ class Effects3DRenderer implements GLSurfaceView.Renderer
       mCenterTexture.setTexture(bitmapC);
       mRegionTexture.setTexture(bitmapR);
 
-      EffectTypes type;
+      EffectType type;
 
-      for( EffectNames name : EffectNames.values() )
+      for( EffectName name : EffectName.values() )
         {
         type = name.getType();
 
-        if( type== EffectTypes.VERTEX || type==EffectTypes.FRAGMENT )
+        if( type== EffectType.VERTEX || type==EffectType.FRAGMENT )
           {
           DistortedEffects.enableEffect(name);
           }
diff --git a/src/main/java/org/distorted/examples/matrix3d/Matrix3DEffect.java b/src/main/java/org/distorted/examples/matrix3d/Matrix3DEffect.java
index a8466ad..5eca2c7 100644
--- a/src/main/java/org/distorted/examples/matrix3d/Matrix3DEffect.java
+++ b/src/main/java/org/distorted/examples/matrix3d/Matrix3DEffect.java
@@ -24,8 +24,25 @@ import android.widget.SeekBar;
 import android.widget.TextView;
 
 import org.distorted.examples.R;
+import org.distorted.library.effect.Effect;
 import org.distorted.library.effect.EffectName;
 import org.distorted.library.effect.EffectType;
+import org.distorted.library.effect.FragmentEffectAlpha;
+import org.distorted.library.effect.FragmentEffectBrightness;
+import org.distorted.library.effect.FragmentEffectChroma;
+import org.distorted.library.effect.FragmentEffectContrast;
+import org.distorted.library.effect.FragmentEffectSaturation;
+import org.distorted.library.effect.MatrixEffectMove;
+import org.distorted.library.effect.MatrixEffectQuaternion;
+import org.distorted.library.effect.MatrixEffectRotate;
+import org.distorted.library.effect.MatrixEffectScale;
+import org.distorted.library.effect.MatrixEffectShear;
+import org.distorted.library.effect.VertexEffectDeform;
+import org.distorted.library.effect.VertexEffectDistort;
+import org.distorted.library.effect.VertexEffectPinch;
+import org.distorted.library.effect.VertexEffectSink;
+import org.distorted.library.effect.VertexEffectSwirl;
+import org.distorted.library.effect.VertexEffectWave;
 import org.distorted.library.main.DistortedEffects;
 import org.distorted.library.type.Dynamic1D;
 import org.distorted.library.type.Dynamic2D;
@@ -79,33 +96,39 @@ class Matrix3DEffect implements SeekBar.OnSeekBarChangeListener
 
   void apply(DistortedEffects effects)
     {
+    Effect effect=null;
+
     switch(mName)
       {
-      case ROTATE           : mId = effects.rotate    (mDyn4, mCenterDyn); break;
-      case QUATERNION       : mId = effects.quaternion(mDyn4, mCenterDyn); break;
-      case MOVE             : mId = effects.move      (mDyn3)            ; break;
-      case SCALE            : mId = effects.scale     (mDyn3)            ; break;
-      case SHEAR            : mId = effects.shear     (mDyn3, mCenterDyn); break;
-
-      case DISTORT          : mId = effects.distort   (mDyn3, mCenterDyn, mRegionDyn); break;
-      case DEFORM           : mId = effects.deform    (mDyn3, mCenterDyn, mRegionDyn); break;
-      case SINK             : mId = effects.sink      (mDyn1, mCenterDyn, mRegionDyn); break;
-      case PINCH            : mId = effects.pinch     (mDyn2, mCenterDyn, mRegionDyn); break;
-      case SWIRL            : mId = effects.swirl     (mDyn1, mCenterDyn, mRegionDyn); break;
-      case WAVE             : mId = effects.wave      (mDyn5, mCenterDyn, mRegionDyn); break;
-
-      case ALPHA            : mId = effects.alpha     (mDyn1,        mRegionDyn, false); break;
-      case SMOOTH_ALPHA     : mId = effects.alpha     (mDyn1,        mRegionDyn, true ); break;
-      case CHROMA           : mId = effects.chroma    (mDyn1, mDyn3, mRegionDyn, false); break;
-      case SMOOTH_CHROMA    : mId = effects.chroma    (mDyn1, mDyn3, mRegionDyn, true ); break;
-      case BRIGHTNESS       : mId = effects.brightness(mDyn1,        mRegionDyn, false); break;
-      case SMOOTH_BRIGHTNESS: mId = effects.brightness(mDyn1,        mRegionDyn, true ); break;
-      case SATURATION       : mId = effects.saturation(mDyn1,        mRegionDyn, false); break;
-      case SMOOTH_SATURATION: mId = effects.saturation(mDyn1,        mRegionDyn, true ); break;
-      case CONTRAST         : mId = effects.contrast  (mDyn1,        mRegionDyn, false); break;
-      case SMOOTH_CONTRAST  : mId = effects.contrast  (mDyn1,        mRegionDyn, true ); break;
-
-      default: mId = -1;
+      case ROTATE           : effect = new MatrixEffectRotate      (mDyn4, mCenterDyn); break;
+      case QUATERNION       : effect = new MatrixEffectQuaternion  (mDyn4, mCenterDyn); break;
+      case MOVE             : effect = new MatrixEffectMove        (mDyn3)            ; break;
+      case SCALE            : effect = new MatrixEffectScale       (mDyn3)            ; break;
+      case SHEAR            : effect = new MatrixEffectShear       (mDyn3, mCenterDyn); break;
+
+      case DISTORT          : effect = new VertexEffectDistort     (mDyn3, mCenterDyn, mRegionDyn); break;
+      case DEFORM           : effect = new VertexEffectDeform      (mDyn3, mCenterDyn, mRegionDyn); break;
+      case SINK             : effect = new VertexEffectSink        (mDyn1, mCenterDyn, mRegionDyn); break;
+      case PINCH            : effect = new VertexEffectPinch       (mDyn2, mCenterDyn, mRegionDyn); break;
+      case SWIRL            : effect = new VertexEffectSwirl       (mDyn1, mCenterDyn, mRegionDyn); break;
+      case WAVE             : effect = new VertexEffectWave        (mDyn5, mCenterDyn, mRegionDyn); break;
+
+      case ALPHA            : effect = new FragmentEffectAlpha     (mDyn1,        mRegionDyn, false); break;
+      case SMOOTH_ALPHA     : effect = new FragmentEffectAlpha     (mDyn1,        mRegionDyn, true ); break;
+      case CHROMA           : effect = new FragmentEffectChroma    (mDyn1, mDyn3, mRegionDyn, false); break;
+      case SMOOTH_CHROMA    : effect = new FragmentEffectChroma    (mDyn1, mDyn3, mRegionDyn, true ); break;
+      case BRIGHTNESS       : effect = new FragmentEffectBrightness(mDyn1,        mRegionDyn, false); break;
+      case SMOOTH_BRIGHTNESS: effect = new FragmentEffectBrightness(mDyn1,        mRegionDyn, true ); break;
+      case SATURATION       : effect = new FragmentEffectSaturation(mDyn1,        mRegionDyn, false); break;
+      case SMOOTH_SATURATION: effect = new FragmentEffectSaturation(mDyn1,        mRegionDyn, true ); break;
+      case CONTRAST         : effect = new FragmentEffectContrast  (mDyn1,        mRegionDyn, false); break;
+      case SMOOTH_CONTRAST  : effect = new FragmentEffectContrast  (mDyn1,        mRegionDyn, true ); break;
+      }
+
+    if( effect!=null )
+      {
+      effects.apply(effect);
+      mId = effect.getID();
       }
     }
 
