commit 125cee3d2ff3ae0cf42e959042becd9eae383a5a
Author: Leszek Koltunski <leszek@distoretedandroid.org>
Date:   Tue Jun 6 15:35:35 2017 +0100

    Progress with support for Effect classes.

diff --git a/src/main/java/org/distorted/library/EffectNames.java b/src/main/java/org/distorted/library/EffectNames.java
index dbb9075..0e9f3ce 100644
--- a/src/main/java/org/distorted/library/EffectNames.java
+++ b/src/main/java/org/distorted/library/EffectNames.java
@@ -90,7 +90,7 @@ public enum EffectNames
 
  /////////////////////////////////////////////////////////////////////////////////
  // VERTEX EFFECTS
- // Always 12 Uniforms: 6 per-effect interpolated values, 2-dimensional center of
+ // Always 12 Uniforms: 5 per-effect interpolated values, 3-dimensional center of
  // the effect, 4-dimensional Region
  /**
    * Apply a 3D vector of force to area around a point on the surface of the Object.
diff --git a/src/main/java/org/distorted/library/effect/FragmentEffect.java b/src/main/java/org/distorted/library/effect/FragmentEffect.java
index 29aea93..875c1b1 100644
--- a/src/main/java/org/distorted/library/effect/FragmentEffect.java
+++ b/src/main/java/org/distorted/library/effect/FragmentEffect.java
@@ -20,6 +20,8 @@
 package org.distorted.library.effect;
 
 import org.distorted.library.type.Data4D;
+import org.distorted.library.type.Dynamic;
+import org.distorted.library.type.Static;
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
@@ -38,7 +40,8 @@ public abstract class FragmentEffect extends Effect
   public static int SATURATION        = 8;
   public static int SMOOTH_SATURATION = 9;
 
-
+  Dynamic mDynamic0, mDynamic1;
+  Static mStatic0, mStatic1;
   Data4D mRegion;
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
diff --git a/src/main/java/org/distorted/library/effect/FragmentEffectAlpha.java b/src/main/java/org/distorted/library/effect/FragmentEffectAlpha.java
new file mode 100644
index 0000000..8146dd8
--- /dev/null
+++ b/src/main/java/org/distorted/library/effect/FragmentEffectAlpha.java
@@ -0,0 +1,69 @@
+///////////////////////////////////////////////////////////////////////////////////////////////////
+// Copyright 2017 Leszek Koltunski                                                               //
+//                                                                                               //
+// This file is part of Distorted.                                                               //
+//                                                                                               //
+// Distorted is free software: you can redistribute it and/or modify                             //
+// it under the terms of the GNU General Public License as published by                          //
+// the Free Software Foundation, either version 2 of the License, or                             //
+// (at your option) any later version.                                                           //
+//                                                                                               //
+// Distorted is distributed in the hope that it will be useful,                                  //
+// but WITHOUT ANY WARRANTY; without even the implied warranty of                                //
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the                                 //
+// GNU General Public License for more details.                                                  //
+//                                                                                               //
+// You should have received a copy of the GNU General Public License                             //
+// along with Distorted.  If not, see <http://www.gnu.org/licenses/>.                            //
+///////////////////////////////////////////////////////////////////////////////////////////////////
+
+package org.distorted.library.effect;
+
+import org.distorted.library.type.Data1D;
+import org.distorted.library.type.Data4D;
+import org.distorted.library.type.Dynamic1D;
+import org.distorted.library.type.Static1D;
+
+///////////////////////////////////////////////////////////////////////////////////////////////////
+
+public class FragmentEffectAlpha extends FragmentEffect
+  {
+  private static final float[] UNITIES = new float[] {1.0f};
+  private static final int DIMENSION = 1;
+  private static final boolean SUPPORTS_CENTER = false;
+  private static final boolean SUPPORTS_REGION = true;
+
+///////////////////////////////////////////////////////////////////////////////////////////////////
+
+  public FragmentEffectAlpha(Data1D alpha, Data4D region, boolean smooth)
+    {
+    super(smooth?SMOOTH_ALPHA:ALPHA ,UNITIES,DIMENSION,SUPPORTS_CENTER,SUPPORTS_REGION);
+
+    if( alpha instanceof Dynamic1D )
+      {
+      mDynamic0 = (Dynamic1D)alpha;
+      }
+    else if ( alpha instanceof Static1D )
+      {
+      mStatic0 = (Static1D)alpha;
+      }
+
+    mRegion = region;
+    }
+
+///////////////////////////////////////////////////////////////////////////////////////////////////
+
+  public FragmentEffectAlpha(Data1D alpha)
+    {
+    super(ALPHA,UNITIES,DIMENSION,SUPPORTS_CENTER,SUPPORTS_REGION);
+
+    if( alpha instanceof Dynamic1D )
+      {
+      mDynamic0 = (Dynamic1D)alpha;
+      }
+    else if ( alpha instanceof Static1D )
+      {
+      mStatic0 = (Static1D)alpha;
+      }
+    }
+  }
diff --git a/src/main/java/org/distorted/library/effect/FragmentEffectBrightness.java b/src/main/java/org/distorted/library/effect/FragmentEffectBrightness.java
new file mode 100644
index 0000000..1c9ceca
--- /dev/null
+++ b/src/main/java/org/distorted/library/effect/FragmentEffectBrightness.java
@@ -0,0 +1,69 @@
+///////////////////////////////////////////////////////////////////////////////////////////////////
+// Copyright 2017 Leszek Koltunski                                                               //
+//                                                                                               //
+// This file is part of Distorted.                                                               //
+//                                                                                               //
+// Distorted is free software: you can redistribute it and/or modify                             //
+// it under the terms of the GNU General Public License as published by                          //
+// the Free Software Foundation, either version 2 of the License, or                             //
+// (at your option) any later version.                                                           //
+//                                                                                               //
+// Distorted is distributed in the hope that it will be useful,                                  //
+// but WITHOUT ANY WARRANTY; without even the implied warranty of                                //
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the                                 //
+// GNU General Public License for more details.                                                  //
+//                                                                                               //
+// You should have received a copy of the GNU General Public License                             //
+// along with Distorted.  If not, see <http://www.gnu.org/licenses/>.                            //
+///////////////////////////////////////////////////////////////////////////////////////////////////
+
+package org.distorted.library.effect;
+
+import org.distorted.library.type.Data1D;
+import org.distorted.library.type.Data4D;
+import org.distorted.library.type.Dynamic1D;
+import org.distorted.library.type.Static1D;
+
+///////////////////////////////////////////////////////////////////////////////////////////////////
+
+public class FragmentEffectBrightness extends FragmentEffect
+  {
+  private static final float[] UNITIES = new float[] {1.0f};
+  private static final int DIMENSION = 1;
+  private static final boolean SUPPORTS_CENTER = false;
+  private static final boolean SUPPORTS_REGION = true;
+
+///////////////////////////////////////////////////////////////////////////////////////////////////
+
+  public FragmentEffectBrightness(Data1D brightness, Data4D region, boolean smooth)
+    {
+    super(smooth?SMOOTH_BRIGHTNESS:BRIGHTNESS ,UNITIES,DIMENSION,SUPPORTS_CENTER,SUPPORTS_REGION);
+
+    if( brightness instanceof Dynamic1D )
+      {
+      mDynamic0 = (Dynamic1D)brightness;
+      }
+    else if ( brightness instanceof Static1D )
+      {
+      mStatic0 = (Static1D)brightness;
+      }
+
+    mRegion = region;
+    }
+
+///////////////////////////////////////////////////////////////////////////////////////////////////
+
+  public FragmentEffectBrightness(Data1D brightness)
+    {
+    super(BRIGHTNESS,UNITIES,DIMENSION,SUPPORTS_CENTER,SUPPORTS_REGION);
+
+    if( brightness instanceof Dynamic1D )
+      {
+      mDynamic0 = (Dynamic1D)brightness;
+      }
+    else if ( brightness instanceof Static1D )
+      {
+      mStatic0 = (Static1D)brightness;
+      }
+    }
+  }
diff --git a/src/main/java/org/distorted/library/effect/FragmentEffectChroma.java b/src/main/java/org/distorted/library/effect/FragmentEffectChroma.java
new file mode 100644
index 0000000..511e197
--- /dev/null
+++ b/src/main/java/org/distorted/library/effect/FragmentEffectChroma.java
@@ -0,0 +1,90 @@
+///////////////////////////////////////////////////////////////////////////////////////////////////
+// Copyright 2017 Leszek Koltunski                                                               //
+//                                                                                               //
+// This file is part of Distorted.                                                               //
+//                                                                                               //
+// Distorted is free software: you can redistribute it and/or modify                             //
+// it under the terms of the GNU General Public License as published by                          //
+// the Free Software Foundation, either version 2 of the License, or                             //
+// (at your option) any later version.                                                           //
+//                                                                                               //
+// Distorted is distributed in the hope that it will be useful,                                  //
+// but WITHOUT ANY WARRANTY; without even the implied warranty of                                //
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the                                 //
+// GNU General Public License for more details.                                                  //
+//                                                                                               //
+// You should have received a copy of the GNU General Public License                             //
+// along with Distorted.  If not, see <http://www.gnu.org/licenses/>.                            //
+///////////////////////////////////////////////////////////////////////////////////////////////////
+
+package org.distorted.library.effect;
+
+import org.distorted.library.type.Data1D;
+import org.distorted.library.type.Data3D;
+import org.distorted.library.type.Data4D;
+import org.distorted.library.type.Dynamic1D;
+import org.distorted.library.type.Dynamic3D;
+import org.distorted.library.type.Static1D;
+import org.distorted.library.type.Static3D;
+
+///////////////////////////////////////////////////////////////////////////////////////////////////
+
+public class FragmentEffectChroma extends FragmentEffect
+  {
+  private static final float[] UNITIES = new float[] {0.0f};
+  private static final int DIMENSION = 4;
+  private static final boolean SUPPORTS_CENTER = false;
+  private static final boolean SUPPORTS_REGION = true;
+
+///////////////////////////////////////////////////////////////////////////////////////////////////
+
+  public FragmentEffectChroma(Data1D blend, Data3D color, Data4D region, boolean smooth)
+    {
+    super(smooth?SMOOTH_CHROMA:CHROMA ,UNITIES,DIMENSION,SUPPORTS_CENTER,SUPPORTS_REGION);
+
+    if( blend instanceof Dynamic1D )
+      {
+      mDynamic0 = (Dynamic1D)blend;
+      }
+    else if ( blend instanceof Static1D )
+      {
+      mStatic0 = (Static1D)blend;
+      }
+
+    if( color instanceof Dynamic3D )
+      {
+      mDynamic1 = (Dynamic3D)color;
+      }
+    else if ( color instanceof Static3D)
+      {
+      mStatic1 = (Static3D)color;
+      }
+
+    mRegion = region;
+    }
+
+///////////////////////////////////////////////////////////////////////////////////////////////////
+
+  public FragmentEffectChroma(Data1D blend, Data3D color)
+    {
+    super(CHROMA,UNITIES,DIMENSION,SUPPORTS_CENTER,SUPPORTS_REGION);
+
+    if( blend instanceof Dynamic1D )
+      {
+      mDynamic0 = (Dynamic1D)blend;
+      }
+    else if ( blend instanceof Static1D )
+      {
+      mStatic0 = (Static1D)blend;
+      }
+
+    if( color instanceof Dynamic3D )
+      {
+      mDynamic1 = (Dynamic3D)color;
+      }
+    else if ( color instanceof Static3D)
+      {
+      mStatic1 = (Static3D)color;
+      }
+    }
+  }
diff --git a/src/main/java/org/distorted/library/effect/FragmentEffectContrast.java b/src/main/java/org/distorted/library/effect/FragmentEffectContrast.java
new file mode 100644
index 0000000..5b0cc1b
--- /dev/null
+++ b/src/main/java/org/distorted/library/effect/FragmentEffectContrast.java
@@ -0,0 +1,69 @@
+///////////////////////////////////////////////////////////////////////////////////////////////////
+// Copyright 2017 Leszek Koltunski                                                               //
+//                                                                                               //
+// This file is part of Distorted.                                                               //
+//                                                                                               //
+// Distorted is free software: you can redistribute it and/or modify                             //
+// it under the terms of the GNU General Public License as published by                          //
+// the Free Software Foundation, either version 2 of the License, or                             //
+// (at your option) any later version.                                                           //
+//                                                                                               //
+// Distorted is distributed in the hope that it will be useful,                                  //
+// but WITHOUT ANY WARRANTY; without even the implied warranty of                                //
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the                                 //
+// GNU General Public License for more details.                                                  //
+//                                                                                               //
+// You should have received a copy of the GNU General Public License                             //
+// along with Distorted.  If not, see <http://www.gnu.org/licenses/>.                            //
+///////////////////////////////////////////////////////////////////////////////////////////////////
+
+package org.distorted.library.effect;
+
+import org.distorted.library.type.Data1D;
+import org.distorted.library.type.Data4D;
+import org.distorted.library.type.Dynamic1D;
+import org.distorted.library.type.Static1D;
+
+///////////////////////////////////////////////////////////////////////////////////////////////////
+
+public class FragmentEffectContrast extends FragmentEffect
+  {
+  private static final float[] UNITIES = new float[] {1.0f};
+  private static final int DIMENSION = 1;
+  private static final boolean SUPPORTS_CENTER = false;
+  private static final boolean SUPPORTS_REGION = true;
+
+///////////////////////////////////////////////////////////////////////////////////////////////////
+
+  public FragmentEffectContrast(Data1D contrast, Data4D region, boolean smooth)
+    {
+    super(smooth?SMOOTH_CONTRAST:CONTRAST ,UNITIES,DIMENSION,SUPPORTS_CENTER,SUPPORTS_REGION);
+
+    if( contrast instanceof Dynamic1D )
+      {
+      mDynamic0 = (Dynamic1D)contrast;
+      }
+    else if ( contrast instanceof Static1D )
+      {
+      mStatic0 = (Static1D)contrast;
+      }
+
+    mRegion = region;
+    }
+
+///////////////////////////////////////////////////////////////////////////////////////////////////
+
+  public FragmentEffectContrast(Data1D contrast)
+    {
+    super(CONTRAST,UNITIES,DIMENSION,SUPPORTS_CENTER,SUPPORTS_REGION);
+
+    if( contrast instanceof Dynamic1D )
+      {
+      mDynamic0 = (Dynamic1D)contrast;
+      }
+    else if ( contrast instanceof Static1D )
+      {
+      mStatic0 = (Static1D)contrast;
+      }
+    }
+  }
diff --git a/src/main/java/org/distorted/library/effect/FragmentEffectSaturation.java b/src/main/java/org/distorted/library/effect/FragmentEffectSaturation.java
new file mode 100644
index 0000000..2523c0b
--- /dev/null
+++ b/src/main/java/org/distorted/library/effect/FragmentEffectSaturation.java
@@ -0,0 +1,69 @@
+///////////////////////////////////////////////////////////////////////////////////////////////////
+// Copyright 2017 Leszek Koltunski                                                               //
+//                                                                                               //
+// This file is part of Distorted.                                                               //
+//                                                                                               //
+// Distorted is free software: you can redistribute it and/or modify                             //
+// it under the terms of the GNU General Public License as published by                          //
+// the Free Software Foundation, either version 2 of the License, or                             //
+// (at your option) any later version.                                                           //
+//                                                                                               //
+// Distorted is distributed in the hope that it will be useful,                                  //
+// but WITHOUT ANY WARRANTY; without even the implied warranty of                                //
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the                                 //
+// GNU General Public License for more details.                                                  //
+//                                                                                               //
+// You should have received a copy of the GNU General Public License                             //
+// along with Distorted.  If not, see <http://www.gnu.org/licenses/>.                            //
+///////////////////////////////////////////////////////////////////////////////////////////////////
+
+package org.distorted.library.effect;
+
+import org.distorted.library.type.Data1D;
+import org.distorted.library.type.Data4D;
+import org.distorted.library.type.Dynamic1D;
+import org.distorted.library.type.Static1D;
+
+///////////////////////////////////////////////////////////////////////////////////////////////////
+
+public class FragmentEffectSaturation extends FragmentEffect
+  {
+  private static final float[] UNITIES = new float[] {1.0f};
+  private static final int DIMENSION = 1;
+  private static final boolean SUPPORTS_CENTER = false;
+  private static final boolean SUPPORTS_REGION = true;
+
+///////////////////////////////////////////////////////////////////////////////////////////////////
+
+  public FragmentEffectSaturation(Data1D saturation, Data4D region, boolean smooth)
+    {
+    super(smooth?SMOOTH_SATURATION:SATURATION ,UNITIES,DIMENSION,SUPPORTS_CENTER,SUPPORTS_REGION);
+
+    if( saturation instanceof Dynamic1D )
+      {
+      mDynamic0 = (Dynamic1D)saturation;
+      }
+    else if ( saturation instanceof Static1D )
+      {
+      mStatic0 = (Static1D)saturation;
+      }
+
+    mRegion = region;
+    }
+
+///////////////////////////////////////////////////////////////////////////////////////////////////
+
+  public FragmentEffectSaturation(Data1D saturation)
+    {
+    super(SATURATION,UNITIES,DIMENSION,SUPPORTS_CENTER,SUPPORTS_REGION);
+
+    if( saturation instanceof Dynamic1D )
+      {
+      mDynamic0 = (Dynamic1D)saturation;
+      }
+    else if ( saturation instanceof Static1D )
+      {
+      mStatic0 = (Static1D)saturation;
+      }
+    }
+  }
diff --git a/src/main/java/org/distorted/library/effect/PostprocessEffect.java b/src/main/java/org/distorted/library/effect/PostprocessEffect.java
index 0cfbbb1..497f0ae 100644
--- a/src/main/java/org/distorted/library/effect/PostprocessEffect.java
+++ b/src/main/java/org/distorted/library/effect/PostprocessEffect.java
@@ -19,6 +19,9 @@
 
 package org.distorted.library.effect;
 
+import org.distorted.library.type.Dynamic;
+import org.distorted.library.type.Static;
+
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
 public abstract class PostprocessEffect extends Effect
@@ -28,6 +31,9 @@ public abstract class PostprocessEffect extends Effect
   public static int BLUR = 0;
   public static int GLOW = 1;
 
+  Dynamic mDynamic0, mDynamic1;
+  Static mStatic0, mStatic1;
+
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
   public PostprocessEffect(int name, float[] unity, int dimension, boolean center, boolean region)
diff --git a/src/main/java/org/distorted/library/effect/PostprocessEffectBlur.java b/src/main/java/org/distorted/library/effect/PostprocessEffectBlur.java
new file mode 100644
index 0000000..b875620
--- /dev/null
+++ b/src/main/java/org/distorted/library/effect/PostprocessEffectBlur.java
@@ -0,0 +1,50 @@
+///////////////////////////////////////////////////////////////////////////////////////////////////
+// Copyright 2017 Leszek Koltunski                                                               //
+//                                                                                               //
+// This file is part of Distorted.                                                               //
+//                                                                                               //
+// Distorted is free software: you can redistribute it and/or modify                             //
+// it under the terms of the GNU General Public License as published by                          //
+// the Free Software Foundation, either version 2 of the License, or                             //
+// (at your option) any later version.                                                           //
+//                                                                                               //
+// Distorted is distributed in the hope that it will be useful,                                  //
+// but WITHOUT ANY WARRANTY; without even the implied warranty of                                //
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the                                 //
+// GNU General Public License for more details.                                                  //
+//                                                                                               //
+// You should have received a copy of the GNU General Public License                             //
+// along with Distorted.  If not, see <http://www.gnu.org/licenses/>.                            //
+///////////////////////////////////////////////////////////////////////////////////////////////////
+
+package org.distorted.library.effect;
+
+import org.distorted.library.type.Data1D;
+import org.distorted.library.type.Dynamic1D;
+import org.distorted.library.type.Static1D;
+
+///////////////////////////////////////////////////////////////////////////////////////////////////
+
+public class PostprocessEffectBlur extends PostprocessEffect
+  {
+  private static final float[] UNITIES = new float[] {0.0f};
+  private static final int DIMENSION = 1;
+  private static final boolean SUPPORTS_CENTER = false;
+  private static final boolean SUPPORTS_REGION = false;
+
+///////////////////////////////////////////////////////////////////////////////////////////////////
+
+  public PostprocessEffectBlur(Data1D radius)
+    {
+    super(BLUR,UNITIES,DIMENSION,SUPPORTS_CENTER,SUPPORTS_REGION);
+
+    if( radius instanceof Dynamic1D)
+      {
+      mDynamic0 = (Dynamic1D)radius;
+      }
+    else if ( radius instanceof Static1D )
+      {
+      mStatic0  = (Static1D)radius;
+      }
+    }
+  }
diff --git a/src/main/java/org/distorted/library/effect/PostprocessEffectGlow.java b/src/main/java/org/distorted/library/effect/PostprocessEffectGlow.java
new file mode 100644
index 0000000..8bd9f28
--- /dev/null
+++ b/src/main/java/org/distorted/library/effect/PostprocessEffectGlow.java
@@ -0,0 +1,62 @@
+///////////////////////////////////////////////////////////////////////////////////////////////////
+// Copyright 2017 Leszek Koltunski                                                               //
+//                                                                                               //
+// This file is part of Distorted.                                                               //
+//                                                                                               //
+// Distorted is free software: you can redistribute it and/or modify                             //
+// it under the terms of the GNU General Public License as published by                          //
+// the Free Software Foundation, either version 2 of the License, or                             //
+// (at your option) any later version.                                                           //
+//                                                                                               //
+// Distorted is distributed in the hope that it will be useful,                                  //
+// but WITHOUT ANY WARRANTY; without even the implied warranty of                                //
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the                                 //
+// GNU General Public License for more details.                                                  //
+//                                                                                               //
+// You should have received a copy of the GNU General Public License                             //
+// along with Distorted.  If not, see <http://www.gnu.org/licenses/>.                            //
+///////////////////////////////////////////////////////////////////////////////////////////////////
+
+package org.distorted.library.effect;
+
+import org.distorted.library.type.Data1D;
+import org.distorted.library.type.Data4D;
+import org.distorted.library.type.Dynamic1D;
+import org.distorted.library.type.Dynamic4D;
+import org.distorted.library.type.Static1D;
+import org.distorted.library.type.Static4D;
+
+///////////////////////////////////////////////////////////////////////////////////////////////////
+
+public class PostprocessEffectGlow extends PostprocessEffect
+  {
+  private static final float[] UNITIES = new float[] {0.0f};
+  private static final int DIMENSION = 5;
+  private static final boolean SUPPORTS_CENTER = false;
+  private static final boolean SUPPORTS_REGION = false;
+
+///////////////////////////////////////////////////////////////////////////////////////////////////
+
+  public PostprocessEffectGlow(Data1D radius, Data4D color)
+    {
+    super(GLOW,UNITIES,DIMENSION,SUPPORTS_CENTER,SUPPORTS_REGION);
+
+    if( radius instanceof Dynamic1D)
+      {
+      mDynamic0 = (Dynamic1D)radius;
+      }
+    else if ( radius instanceof Static1D )
+      {
+      mStatic0  = (Static1D)radius;
+      }
+
+    if( color instanceof Dynamic4D)
+      {
+      mDynamic1 = (Dynamic4D)color;
+      }
+    else if ( color instanceof Static4D)
+      {
+      mStatic1  = (Static4D)color;
+      }
+    }
+  }
diff --git a/src/main/java/org/distorted/library/effect/VertexEffect.java b/src/main/java/org/distorted/library/effect/VertexEffect.java
index 22ab181..67a611b 100644
--- a/src/main/java/org/distorted/library/effect/VertexEffect.java
+++ b/src/main/java/org/distorted/library/effect/VertexEffect.java
@@ -19,6 +19,11 @@
 
 package org.distorted.library.effect;
 
+import org.distorted.library.type.Data3D;
+import org.distorted.library.type.Data4D;
+import org.distorted.library.type.Dynamic;
+import org.distorted.library.type.Static;
+
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
 public abstract class VertexEffect extends Effect
@@ -32,6 +37,11 @@ public abstract class VertexEffect extends Effect
   public static int SWIRL   = 4;
   public static int WAVE    = 5;
 
+  Dynamic mDynamic0;
+  Static mStatic0;
+  Data3D mCenter;
+  Data4D mRegion;
+
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
   public VertexEffect(int name, float[] unity, int dimension, boolean center, boolean region)
diff --git a/src/main/java/org/distorted/library/effect/VertexEffectDeform.java b/src/main/java/org/distorted/library/effect/VertexEffectDeform.java
new file mode 100644
index 0000000..50bab5e
--- /dev/null
+++ b/src/main/java/org/distorted/library/effect/VertexEffectDeform.java
@@ -0,0 +1,72 @@
+///////////////////////////////////////////////////////////////////////////////////////////////////
+// Copyright 2017 Leszek Koltunski                                                               //
+//                                                                                               //
+// This file is part of Distorted.                                                               //
+//                                                                                               //
+// Distorted is free software: you can redistribute it and/or modify                             //
+// it under the terms of the GNU General Public License as published by                          //
+// the Free Software Foundation, either version 2 of the License, or                             //
+// (at your option) any later version.                                                           //
+//                                                                                               //
+// Distorted is distributed in the hope that it will be useful,                                  //
+// but WITHOUT ANY WARRANTY; without even the implied warranty of                                //
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the                                 //
+// GNU General Public License for more details.                                                  //
+//                                                                                               //
+// You should have received a copy of the GNU General Public License                             //
+// along with Distorted.  If not, see <http://www.gnu.org/licenses/>.                            //
+///////////////////////////////////////////////////////////////////////////////////////////////////
+
+package org.distorted.library.effect;
+
+import org.distorted.library.type.Data3D;
+import org.distorted.library.type.Data4D;
+import org.distorted.library.type.Dynamic3D;
+import org.distorted.library.type.Static3D;
+
+///////////////////////////////////////////////////////////////////////////////////////////////////
+
+public class VertexEffectDeform extends VertexEffect
+  {
+  private static final float[] UNITIES = new float[] {0.0f,0.0f,0.0f};
+  private static final int DIMENSION = 3;
+  private static final boolean SUPPORTS_CENTER = true;
+  private static final boolean SUPPORTS_REGION = true;
+
+///////////////////////////////////////////////////////////////////////////////////////////////////
+
+  public VertexEffectDeform(Data3D vector, Data3D center, Data4D region)
+    {
+    super(DEFORM,UNITIES,DIMENSION,SUPPORTS_CENTER,SUPPORTS_REGION);
+
+    if( vector instanceof Dynamic3D )
+      {
+      mDynamic0 = (Dynamic3D)vector;
+      }
+    else if ( vector instanceof Static3D )
+      {
+      mStatic0 = (Static3D)vector;
+      }
+
+    mCenter = center;
+    mRegion = region;
+    }
+
+///////////////////////////////////////////////////////////////////////////////////////////////////
+
+  public VertexEffectDeform(Data3D vector, Data3D center)
+    {
+    super(DEFORM,UNITIES,DIMENSION,SUPPORTS_CENTER,SUPPORTS_REGION);
+
+    if( vector instanceof Dynamic3D )
+      {
+      mDynamic0 = (Dynamic3D)vector;
+      }
+    else if ( vector instanceof Static3D )
+      {
+      mStatic0 = (Static3D)vector;
+      }
+
+    mCenter = center;
+    }
+  }
diff --git a/src/main/java/org/distorted/library/effect/VertexEffectDistort.java b/src/main/java/org/distorted/library/effect/VertexEffectDistort.java
new file mode 100644
index 0000000..75c6cbc
--- /dev/null
+++ b/src/main/java/org/distorted/library/effect/VertexEffectDistort.java
@@ -0,0 +1,72 @@
+///////////////////////////////////////////////////////////////////////////////////////////////////
+// Copyright 2017 Leszek Koltunski                                                               //
+//                                                                                               //
+// This file is part of Distorted.                                                               //
+//                                                                                               //
+// Distorted is free software: you can redistribute it and/or modify                             //
+// it under the terms of the GNU General Public License as published by                          //
+// the Free Software Foundation, either version 2 of the License, or                             //
+// (at your option) any later version.                                                           //
+//                                                                                               //
+// Distorted is distributed in the hope that it will be useful,                                  //
+// but WITHOUT ANY WARRANTY; without even the implied warranty of                                //
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the                                 //
+// GNU General Public License for more details.                                                  //
+//                                                                                               //
+// You should have received a copy of the GNU General Public License                             //
+// along with Distorted.  If not, see <http://www.gnu.org/licenses/>.                            //
+///////////////////////////////////////////////////////////////////////////////////////////////////
+
+package org.distorted.library.effect;
+
+import org.distorted.library.type.Data3D;
+import org.distorted.library.type.Data4D;
+import org.distorted.library.type.Dynamic3D;
+import org.distorted.library.type.Static3D;
+
+///////////////////////////////////////////////////////////////////////////////////////////////////
+
+public class VertexEffectDistort extends VertexEffect
+  {
+  private static final float[] UNITIES = new float[] {0.0f,0.0f,0.0f};
+  private static final int DIMENSION = 3;
+  private static final boolean SUPPORTS_CENTER = true;
+  private static final boolean SUPPORTS_REGION = true;
+
+///////////////////////////////////////////////////////////////////////////////////////////////////
+
+  public VertexEffectDistort(Data3D vector, Data3D center, Data4D region)
+    {
+    super(DISTORT,UNITIES,DIMENSION,SUPPORTS_CENTER,SUPPORTS_REGION);
+
+    if( vector instanceof Dynamic3D )
+      {
+      mDynamic0 = (Dynamic3D)vector;
+      }
+    else if ( vector instanceof Static3D )
+      {
+      mStatic0 = (Static3D)vector;
+      }
+
+    mCenter = center;
+    mRegion = region;
+    }
+
+///////////////////////////////////////////////////////////////////////////////////////////////////
+
+  public VertexEffectDistort(Data3D vector, Data3D center)
+    {
+    super(DISTORT,UNITIES,DIMENSION,SUPPORTS_CENTER,SUPPORTS_REGION);
+
+    if( vector instanceof Dynamic3D )
+      {
+      mDynamic0 = (Dynamic3D)vector;
+      }
+    else if ( vector instanceof Static3D )
+      {
+      mStatic0 = (Static3D)vector;
+      }
+
+    mCenter = center;
+    }
+  }
diff --git a/src/main/java/org/distorted/library/effect/VertexEffectPinch.java b/src/main/java/org/distorted/library/effect/VertexEffectPinch.java
new file mode 100644
index 0000000..130bcab
--- /dev/null
+++ b/src/main/java/org/distorted/library/effect/VertexEffectPinch.java
@@ -0,0 +1,73 @@
+///////////////////////////////////////////////////////////////////////////////////////////////////
+// Copyright 2017 Leszek Koltunski                                                               //
+//                                                                                               //
+// This file is part of Distorted.                                                               //
+//                                                                                               //
+// Distorted is free software: you can redistribute it and/or modify                             //
+// it under the terms of the GNU General Public License as published by                          //
+// the Free Software Foundation, either version 2 of the License, or                             //
+// (at your option) any later version.                                                           //
+//                                                                                               //
+// Distorted is distributed in the hope that it will be useful,                                  //
+// but WITHOUT ANY WARRANTY; without even the implied warranty of                                //
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the                                 //
+// GNU General Public License for more details.                                                  //
+//                                                                                               //
+// You should have received a copy of the GNU General Public License                             //
+// along with Distorted.  If not, see <http://www.gnu.org/licenses/>.                            //
+///////////////////////////////////////////////////////////////////////////////////////////////////
+
+package org.distorted.library.effect;
+
+import org.distorted.library.type.Data1D;
+import org.distorted.library.type.Data3D;
+import org.distorted.library.type.Data4D;
+import org.distorted.library.type.Dynamic1D;
+import org.distorted.library.type.Static1D;
+
+///////////////////////////////////////////////////////////////////////////////////////////////////
+
+public class VertexEffectPinch extends VertexEffect
+  {
+  private static final float[] UNITIES = new float[] {1.0f};
+  private static final int DIMENSION = 2;
+  private static final boolean SUPPORTS_CENTER = true;
+  private static final boolean SUPPORTS_REGION = true;
+
+///////////////////////////////////////////////////////////////////////////////////////////////////
+
+  public VertexEffectPinch(Data1D pinch, Data3D center, Data4D region)
+    {
+    super(PINCH,UNITIES,DIMENSION,SUPPORTS_CENTER,SUPPORTS_REGION);
+
+    if( pinch instanceof Dynamic1D)
+      {
+      mDynamic0 = (Dynamic1D)pinch;
+      }
+    else if ( pinch instanceof Static1D )
+      {
+      mStatic0  = (Static1D)pinch;
+      }
+
+    mCenter = center;
+    mRegion = region;
+    }
+
+///////////////////////////////////////////////////////////////////////////////////////////////////
+
+  public VertexEffectPinch(Data1D pinch, Data3D center)
+    {
+    super(PINCH,UNITIES,DIMENSION,SUPPORTS_CENTER,SUPPORTS_REGION);
+
+    if( pinch instanceof Dynamic1D)
+      {
+      mDynamic0 = (Dynamic1D)pinch;
+      }
+    else if ( pinch instanceof Static1D )
+      {
+      mStatic0  = (Static1D)pinch;
+      }
+
+    mCenter = center;
+    }
+  }
diff --git a/src/main/java/org/distorted/library/effect/VertexEffectSink.java b/src/main/java/org/distorted/library/effect/VertexEffectSink.java
new file mode 100644
index 0000000..61a0453
--- /dev/null
+++ b/src/main/java/org/distorted/library/effect/VertexEffectSink.java
@@ -0,0 +1,73 @@
+///////////////////////////////////////////////////////////////////////////////////////////////////
+// Copyright 2017 Leszek Koltunski                                                               //
+//                                                                                               //
+// This file is part of Distorted.                                                               //
+//                                                                                               //
+// Distorted is free software: you can redistribute it and/or modify                             //
+// it under the terms of the GNU General Public License as published by                          //
+// the Free Software Foundation, either version 2 of the License, or                             //
+// (at your option) any later version.                                                           //
+//                                                                                               //
+// Distorted is distributed in the hope that it will be useful,                                  //
+// but WITHOUT ANY WARRANTY; without even the implied warranty of                                //
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the                                 //
+// GNU General Public License for more details.                                                  //
+//                                                                                               //
+// You should have received a copy of the GNU General Public License                             //
+// along with Distorted.  If not, see <http://www.gnu.org/licenses/>.                            //
+///////////////////////////////////////////////////////////////////////////////////////////////////
+
+package org.distorted.library.effect;
+
+import org.distorted.library.type.Data1D;
+import org.distorted.library.type.Data3D;
+import org.distorted.library.type.Data4D;
+import org.distorted.library.type.Dynamic1D;
+import org.distorted.library.type.Static1D;
+
+///////////////////////////////////////////////////////////////////////////////////////////////////
+
+public class VertexEffectSink extends VertexEffect
+  {
+  private static final float[] UNITIES = new float[] {1.0f};
+  private static final int DIMENSION = 1;
+  private static final boolean SUPPORTS_CENTER = true;
+  private static final boolean SUPPORTS_REGION = true;
+
+///////////////////////////////////////////////////////////////////////////////////////////////////
+
+  public VertexEffectSink(Data1D sink, Data3D center, Data4D region)
+    {
+    super(SINK,UNITIES,DIMENSION,SUPPORTS_CENTER,SUPPORTS_REGION);
+
+    if( sink instanceof Dynamic1D)
+      {
+      mDynamic0 = (Dynamic1D)sink;
+      }
+    else if ( sink instanceof Static1D )
+      {
+      mStatic0  = (Static1D)sink;
+      }
+
+    mCenter = center;
+    mRegion = region;
+    }
+
+///////////////////////////////////////////////////////////////////////////////////////////////////
+
+  public VertexEffectSink(Data1D sink, Data3D center)
+    {
+    super(SINK,UNITIES,DIMENSION,SUPPORTS_CENTER,SUPPORTS_REGION);
+
+    if( sink instanceof Dynamic1D)
+      {
+      mDynamic0 = (Dynamic1D)sink;
+      }
+    else if ( sink instanceof Static1D )
+      {
+      mStatic0  = (Static1D)sink;
+      }
+
+    mCenter = center;
+    }
+  }
diff --git a/src/main/java/org/distorted/library/effect/VertexEffectSwirl.java b/src/main/java/org/distorted/library/effect/VertexEffectSwirl.java
new file mode 100644
index 0000000..c69eac8
--- /dev/null
+++ b/src/main/java/org/distorted/library/effect/VertexEffectSwirl.java
@@ -0,0 +1,73 @@
+///////////////////////////////////////////////////////////////////////////////////////////////////
+// Copyright 2017 Leszek Koltunski                                                               //
+//                                                                                               //
+// This file is part of Distorted.                                                               //
+//                                                                                               //
+// Distorted is free software: you can redistribute it and/or modify                             //
+// it under the terms of the GNU General Public License as published by                          //
+// the Free Software Foundation, either version 2 of the License, or                             //
+// (at your option) any later version.                                                           //
+//                                                                                               //
+// Distorted is distributed in the hope that it will be useful,                                  //
+// but WITHOUT ANY WARRANTY; without even the implied warranty of                                //
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the                                 //
+// GNU General Public License for more details.                                                  //
+//                                                                                               //
+// You should have received a copy of the GNU General Public License                             //
+// along with Distorted.  If not, see <http://www.gnu.org/licenses/>.                            //
+///////////////////////////////////////////////////////////////////////////////////////////////////
+
+package org.distorted.library.effect;
+
+import org.distorted.library.type.Data1D;
+import org.distorted.library.type.Data3D;
+import org.distorted.library.type.Data4D;
+import org.distorted.library.type.Dynamic1D;
+import org.distorted.library.type.Static1D;
+
+///////////////////////////////////////////////////////////////////////////////////////////////////
+
+public class VertexEffectSwirl extends VertexEffect
+  {
+  private static final float[] UNITIES = new float[] {0.0f};
+  private static final int DIMENSION = 1;
+  private static final boolean SUPPORTS_CENTER = true;
+  private static final boolean SUPPORTS_REGION = true;
+
+///////////////////////////////////////////////////////////////////////////////////////////////////
+
+  public VertexEffectSwirl(Data1D swirl, Data3D center, Data4D region)
+    {
+    super(SWIRL,UNITIES,DIMENSION,SUPPORTS_CENTER,SUPPORTS_REGION);
+
+    if( swirl instanceof Dynamic1D)
+      {
+      mDynamic0 = (Dynamic1D)swirl;
+      }
+    else if ( swirl instanceof Static1D )
+      {
+      mStatic0  = (Static1D)swirl;
+      }
+
+    mCenter = center;
+    mRegion = region;
+    }
+
+///////////////////////////////////////////////////////////////////////////////////////////////////
+
+  public VertexEffectSwirl(Data1D swirl, Data3D center)
+    {
+    super(SWIRL,UNITIES,DIMENSION,SUPPORTS_CENTER,SUPPORTS_REGION);
+
+    if( swirl instanceof Dynamic1D)
+      {
+      mDynamic0 = (Dynamic1D)swirl;
+      }
+    else if ( swirl instanceof Static1D )
+      {
+      mStatic0  = (Static1D)swirl;
+      }
+
+    mCenter = center;
+    }
+  }
diff --git a/src/main/java/org/distorted/library/effect/VertexEffectWave.java b/src/main/java/org/distorted/library/effect/VertexEffectWave.java
new file mode 100644
index 0000000..f1a33fb
--- /dev/null
+++ b/src/main/java/org/distorted/library/effect/VertexEffectWave.java
@@ -0,0 +1,73 @@
+///////////////////////////////////////////////////////////////////////////////////////////////////
+// Copyright 2017 Leszek Koltunski                                                               //
+//                                                                                               //
+// This file is part of Distorted.                                                               //
+//                                                                                               //
+// Distorted is free software: you can redistribute it and/or modify                             //
+// it under the terms of the GNU General Public License as published by                          //
+// the Free Software Foundation, either version 2 of the License, or                             //
+// (at your option) any later version.                                                           //
+//                                                                                               //
+// Distorted is distributed in the hope that it will be useful,                                  //
+// but WITHOUT ANY WARRANTY; without even the implied warranty of                                //
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the                                 //
+// GNU General Public License for more details.                                                  //
+//                                                                                               //
+// You should have received a copy of the GNU General Public License                             //
+// along with Distorted.  If not, see <http://www.gnu.org/licenses/>.                            //
+///////////////////////////////////////////////////////////////////////////////////////////////////
+
+package org.distorted.library.effect;
+
+import org.distorted.library.type.Data3D;
+import org.distorted.library.type.Data4D;
+import org.distorted.library.type.Data5D;
+import org.distorted.library.type.Dynamic5D;
+import org.distorted.library.type.Static5D;
+
+///////////////////////////////////////////////////////////////////////////////////////////////////
+
+public class VertexEffectWave extends VertexEffect
+  {
+  private static final float[] UNITIES = new float[] {0.0f};
+  private static final int DIMENSION = 5;
+  private static final boolean SUPPORTS_CENTER = true;
+  private static final boolean SUPPORTS_REGION = true;
+
+///////////////////////////////////////////////////////////////////////////////////////////////////
+
+  public VertexEffectWave(Data5D wave, Data3D center, Data4D region)
+    {
+    super(WAVE,UNITIES,DIMENSION,SUPPORTS_CENTER,SUPPORTS_REGION);
+
+    if( wave instanceof Dynamic5D)
+      {
+      mDynamic0 = (Dynamic5D)wave;
+      }
+    else if ( wave instanceof Static5D)
+      {
+      mStatic0  = (Static5D)wave;
+      }
+
+    mCenter = center;
+    mRegion = region;
+    }
+
+///////////////////////////////////////////////////////////////////////////////////////////////////
+
+  public VertexEffectWave(Data5D wave, Data3D center)
+    {
+    super(WAVE,UNITIES,DIMENSION,SUPPORTS_CENTER,SUPPORTS_REGION);
+
+    if( wave instanceof Dynamic5D)
+      {
+      mDynamic0 = (Dynamic5D)wave;
+      }
+    else if ( wave instanceof Static5D)
+      {
+      mStatic0  = (Static5D)wave;
+      }
+
+    mCenter = center;
+    }
+  }
