commit 8bf89617602adbd9a2c0353ee514ae7962324b06
Author: Leszek Koltunski <leszek@koltunski.pl>
Date:   Thu Aug 13 14:35:18 2020 +0100

    New effect VertexEffectDisappear

diff --git a/src/main/java/org/distorted/examples/generic/GenericEffect.java b/src/main/java/org/distorted/examples/generic/GenericEffect.java
index 9f102d4..ae94501 100644
--- a/src/main/java/org/distorted/examples/generic/GenericEffect.java
+++ b/src/main/java/org/distorted/examples/generic/GenericEffect.java
@@ -40,6 +40,7 @@ import org.distorted.library.effect.MatrixEffectShear;
 import org.distorted.library.effect.PostprocessEffectBlur;
 import org.distorted.library.effect.PostprocessEffectGlow;
 import org.distorted.library.effect.VertexEffectDeform;
+import org.distorted.library.effect.VertexEffectDisappear;
 import org.distorted.library.effect.VertexEffectDistort;
 import org.distorted.library.effect.VertexEffectMove;
 import org.distorted.library.effect.VertexEffectPinch;
@@ -124,6 +125,8 @@ class GenericEffect implements SeekBar.OnSeekBarChangeListener
       case PINCH            : effect = new VertexEffectPinch       (mDyn3, mCenterDyn, mRegion4Dyn)              ; break;
       case SWIRL            : effect = new VertexEffectSwirl       (mDyn1, mCenterDyn, mRegion4Dyn)              ; break;
       case WAVE             : effect = new VertexEffectWave        (mDyn5, mCenterDyn, mRegion4Dyn)              ; break;
+      case DISAPPEAR        : effect = new VertexEffectDisappear   ()                                            ; break;
+
       case VERTEX_MOVE      : effect = new VertexEffectMove        (mDyn3)                                       ; break;
       case VERTEX_QUATERNION: effect = new VertexEffectQuaternion  (mDyn4, mCenterDyn)                           ; break;
       case VERTEX_ROTATE    : effect = new VertexEffectRotate      (mDyn1, mDyn3, mCenterDyn)                    ; break;
@@ -238,6 +241,7 @@ class GenericEffect implements SeekBar.OnSeekBarChangeListener
                               float bp = (mInter[2]-50)*180 / 50.0f;
                               mSta3.set(dp,ap,bp);
                               break;
+      case DISAPPEAR        : break;
 
       ///////////////////////////////////////////////////////////////////////////////////////
       // FRAGMENT
@@ -490,6 +494,7 @@ class GenericEffect implements SeekBar.OnSeekBarChangeListener
 
     switch(mDimension)
       {
+      case 0 : break;
       case 1 : mDyn1 = new Dynamic1D();
                mSta1 = new Static1D(0);
                mDyn1.add(mSta1);
@@ -544,23 +549,26 @@ class GenericEffect implements SeekBar.OnSeekBarChangeListener
       default: throw new RuntimeException("unsupported effect");
       }
 
-    mInter = new int[mDimension];
-    mSeekID= new int[mDimension];
-
-    mInterRegion = new int[4];
-    mSeekRegionID= new int[4];
-    mRegion4Dyn  = new Dynamic4D();
-    mRegion4Sta  = new Static4D(0,0,0,0);
-    mRegion4Dyn.add(mRegion4Sta);
-    mRegion3Dyn  = new Dynamic3D();
-    mRegion3Sta  = new Static3D(0,0,0);
-    mRegion3Dyn.add(mRegion3Sta);
-
-    mInterCenter = new int[3];
-    mSeekCenterID= new int[3];
-    mCenterDyn   = new Dynamic3D();
-    mCenterSta   = new Static3D(0,0,0);
-    mCenterDyn.add(mCenterSta);
+    if( mDimension>0 )
+      {
+      mInter = new int[mDimension];
+      mSeekID= new int[mDimension];
+
+      mInterRegion = new int[4];
+      mSeekRegionID= new int[4];
+      mRegion4Dyn  = new Dynamic4D();
+      mRegion4Sta  = new Static4D(0,0,0,0);
+      mRegion4Dyn.add(mRegion4Sta);
+      mRegion3Dyn  = new Dynamic3D();
+      mRegion3Sta  = new Static3D(0,0,0);
+      mRegion3Dyn.add(mRegion3Sta);
+
+      mInterCenter = new int[3];
+      mSeekCenterID= new int[3];
+      mCenterDyn   = new Dynamic3D();
+      mCenterSta   = new Static3D(0,0,0);
+      mCenterDyn.add(mCenterSta);
+      }
 
     mButton = null;
     mEffect = null;
@@ -572,12 +580,22 @@ class GenericEffect implements SeekBar.OnSeekBarChangeListener
 
   View createView(int num)
     {
-    SeekBar[] seek = new SeekBar[mDimension];
+    SeekBar[] seek = null;
+
+    if( mDimension>0 )
+      {
+      seek = new SeekBar[mDimension];
+      }
 
     GenericActivity2 act = mAct.get();
 
     switch(mDimension)
       {
+      case 0 : mEffect    = act.getLayoutInflater().inflate(R.layout.effect0d, null);
+               mText      = mEffect.findViewById(R.id.effect0dText);
+               mButton    = mEffect.findViewById(R.id.button0dRemove);
+               setText();
+               break;
       case 1 : mEffect    = act.getLayoutInflater().inflate(R.layout.effect1d, null);
                mText      = mEffect.findViewById(R.id.effect1dText);
                seek[0]    = mEffect.findViewById(R.id.effect1dbar1);
diff --git a/src/main/java/org/distorted/examples/generic/GenericTab.java b/src/main/java/org/distorted/examples/generic/GenericTab.java
index 7cc8110..1827904 100644
--- a/src/main/java/org/distorted/examples/generic/GenericTab.java
+++ b/src/main/java/org/distorted/examples/generic/GenericTab.java
@@ -123,6 +123,7 @@ public class GenericTab extends Fragment implements AdapterView.OnItemSelectedLi
       {
       case R.id.effects3dButtonAdd   : newEffect(); break;
       case R.id.effects3dButtonRemove: removeAll(); break;
+      case R.id.button0dRemove       :
       case R.id.button1dRemove       :
       case R.id.button2dRemove       :
       case R.id.button3dRemove       :
@@ -189,6 +190,9 @@ public class GenericTab extends Fragment implements AdapterView.OnItemSelectedLi
 
     switch(dimension)
       {
+      case 0: butt = view.findViewById(R.id.button0dRemove);
+              butt.setOnClickListener(this);
+              break;
       case 1: butt = view.findViewById(R.id.button1dRemove);
               butt.setOnClickListener(this);
               break;
diff --git a/src/main/res/layout/effect0d.xml b/src/main/res/layout/effect0d.xml
new file mode 100644
index 0000000..9ba23b9
--- /dev/null
+++ b/src/main/res/layout/effect0d.xml
@@ -0,0 +1,32 @@
+<?xml version="1.0" encoding="utf-8"?>
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+              android:id="@+id/effect0dLayout"
+              android:layout_width="match_parent"
+              android:layout_height="wrap_content"
+              android:orientation="vertical">
+
+        <LinearLayout
+              android:id="@+id/button0dLayout"
+              android:layout_width="match_parent"
+              android:layout_height="match_parent"
+              android:orientation="horizontal">
+
+                <TextView
+                    android:id="@+id/effect0dText"
+                    android:layout_width="wrap_content"
+                    android:layout_height="wrap_content"
+                    android:layout_marginEnd="5dp"
+                    android:layout_marginStart="5dp"
+                    android:layout_marginTop="3dp"
+                    android:layout_weight="1"/>
+
+                <Button
+                    android:text="@string/removebut"
+                    android:layout_width="wrap_content"
+                    android:layout_height="wrap_content"
+                    android:id="@+id/button0dRemove"
+                    android:layout_weight="0.2"
+                    android:layout_marginTop="3dp"/>
+        </LinearLayout>
+
+</LinearLayout>
