commit 348dbeea058c19dbde908af69688dfe1e8ebd915
Author: Leszek Koltunski <leszek@koltunski.pl>
Date:   Mon Jul 30 14:36:43 2018 +0100

    Split the Effects3D app into 2 activities

diff --git a/src/main/AndroidManifest.xml b/src/main/AndroidManifest.xml
index fa0374e..6762082 100644
--- a/src/main/AndroidManifest.xml
+++ b/src/main/AndroidManifest.xml
@@ -36,6 +36,7 @@
         <activity android:name=".quaternion.QuaternionActivity" />          
         <activity android:name=".matrix3d.Matrix3DActivity" />
         <activity android:name=".effects3d.Effects3DActivity" />
+        <activity android:name=".effects3d.Effects3DActivity2" />
         <activity android:name=".plainmonalisa.PlainMonaLisaActivity" />
         <activity android:name=".save.SaveActivity"/>
         <activity android:name=".flag.FlagActivity"/>
diff --git a/src/main/java/org/distorted/examples/effects3d/Effects3DActivity.java b/src/main/java/org/distorted/examples/effects3d/Effects3DActivity.java
index cdafa40..e0c9b2a 100644
--- a/src/main/java/org/distorted/examples/effects3d/Effects3DActivity.java
+++ b/src/main/java/org/distorted/examples/effects3d/Effects3DActivity.java
@@ -20,36 +20,19 @@
 package org.distorted.examples.effects3d;
 
 import android.app.Activity;
-import android.graphics.Bitmap;
-import android.graphics.BitmapFactory;
-import android.graphics.Canvas;
-import android.graphics.Paint;
-import android.opengl.GLSurfaceView;
+import android.content.Intent;
 import android.os.Bundle;
-import android.support.design.widget.TabLayout;
-import android.support.v4.view.ViewPager;
 import android.view.Gravity;
 import android.view.View;
 import android.widget.AdapterView;
 import android.widget.ArrayAdapter;
 import android.widget.Button;
-import android.widget.CheckBox;
 import android.widget.LinearLayout;
 import android.widget.NumberPicker;
 import android.widget.Spinner;
 import android.widget.TableRow;
 
 import org.distorted.examples.R;
-import org.distorted.library.effect.EffectType;
-import org.distorted.library.main.Distorted;
-import org.distorted.library.main.MeshCubes;
-import org.distorted.library.main.MeshFlat;
-import org.distorted.library.main.MeshObject;
-import org.distorted.library.main.DistortedTexture;
-import org.distorted.library.main.DistortedEffects;
-
-import java.io.IOException;
-import java.io.InputStream;
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
@@ -66,24 +49,10 @@ public class Effects3DActivity extends Activity
   private boolean mGridInitialized;
   private NumberPicker mColsPicker, mRowsPicker, mSlicPicker;
   private boolean[] mShape;
-  private DistortedTexture mTexture;
-  private MeshObject mMesh;
   private int mObjectType;
   private int mBitmapID;
-  private Bitmap mBitmap;
   private LinearLayout mLay;
 
-  private float mCenterX, mCenterY, mCenterZ;
-  private float mRegionX, mRegionY, mRegionR;
-  private DistortedEffects mEffects;
-  private ViewPager mViewPager;
-  private Effects3DTabViewPager mPager;
-
-  private static boolean mShowCenter = true;
-  private static boolean mShowRegion = true;
-  private static boolean mShowNormal = true;
-  private static boolean mUseOIT     = false;
-
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
   @Override
@@ -205,67 +174,6 @@ public class Effects3DActivity extends Activity
       }
     }
 
-///////////////////////////////////////////////////////////////////////////////////////////////////
-
-  public DistortedTexture getTexture()
-    {
-    return mTexture;
-    }
-
-///////////////////////////////////////////////////////////////////////////////////////////////////
-
-  public MeshObject getMesh()
-    {
-    return mMesh;
-    }
-
-///////////////////////////////////////////////////////////////////////////////////////////////////
-
-  public Bitmap getBitmap()
-    {
-    if( mBitmap==null )
-      {
-      if( mBitmapID!=-1)
-        {
-        InputStream is = getResources().openRawResource(mBitmapID);
-
-        try
-          {
-          mBitmap = BitmapFactory.decodeStream(is);
-          }
-        finally
-          {
-          try
-            {
-            is.close();
-            }
-          catch(IOException e) { }
-          }
-        }
-      else
-        {
-        final int W = 64*mNumCols;
-        final int H = 64*mNumRows;
-
-        Paint paint = new Paint();
-        mBitmap = Bitmap.createBitmap(W,H, Bitmap.Config.ARGB_8888);
-        Canvas canvas = new Canvas(mBitmap);
-
-        paint.setAntiAlias(true);
-        paint.setTextAlign(Paint.Align.CENTER);
-        paint.setColor(0xff008800);
-        paint.setStyle(Paint.Style.FILL);
-        canvas.drawRect(0, 0, W, H, paint);
-        paint.setColor(0xffffffff);
-
-        for(int i=0; i<=mNumCols ; i++ ) canvas.drawRect(W*i/mNumCols-1, 0, W*i/mNumCols + 1, H, paint);
-        for(int i=0; i<=mNumRows ; i++ ) canvas.drawRect( 0, H*i/mNumRows-1, W,  H*i/mNumRows+1, paint);
-        }
-      }
-
-    return mBitmap;
-    }
-
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
   public void onClick(View view)
@@ -299,82 +207,22 @@ public class Effects3DActivity extends Activity
       }
     }
 
-///////////////////////////////////////////////////////////////////////////////////////////////////
-
-  public void setRegion(float x, float y, float r)
-    {
-    mRegionX = x;
-    mRegionY =-y;
-    mRegionR = r;
-
-    Effects3DSurfaceView view = findViewById(R.id.effects3dSurfaceView);
-    view.getRenderer().setRegion(mRegionX, mRegionY, mRegionR);
-    }
-
-///////////////////////////////////////////////////////////////////////////////////////////////////
-
-  public void setCenter(float x, float y, float z)
-    {
-    mCenterX = x;
-    mCenterY = y;
-    mCenterZ = z;
-
-    Effects3DSurfaceView view = findViewById(R.id.effects3dSurfaceView);
-    view.getRenderer().setCenter( mCenterX, mCenterY, mCenterZ );
-    }
-
-///////////////////////////////////////////////////////////////////////////////////////////////////
-
-  public float getCenterX()
-    {
-    return mCenterX;
-    }
-
-///////////////////////////////////////////////////////////////////////////////////////////////////
-
-  public float getCenterY()
-    {
-    return mCenterY;
-    }
-
-///////////////////////////////////////////////////////////////////////////////////////////////////
-
-  public float getCenterZ()
-    {
-    return mCenterZ;
-    }
-
-///////////////////////////////////////////////////////////////////////////////////////////////////
-
-  public float getRegionX()
-    {
-    return mRegionX;
-    }
-
-///////////////////////////////////////////////////////////////////////////////////////////////////
-
-  public float getRegionY()
-    {
-    return mRegionY;
-    }
-
-///////////////////////////////////////////////////////////////////////////////////////////////////
-
-  public float getRegionR()
-    {
-    return mRegionR;
-    }
-
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
   public void Create(View v)
     {
-    DistortedEffects.setMax(EffectType.VERTEX ,20);    // those have to be called before
-    DistortedEffects.setMax(EffectType.FRAGMENT,3);    // any DistortedEffect get created!
+    Intent mainInt = new Intent( getApplicationContext(), Effects3DActivity2.class);
+    Bundle b = new Bundle();
+
+    b.putInt("type", mObjectType);
+    b.putInt("cols", mNumCols);
+    b.putInt("rows", mNumRows);
+    b.putInt("slices", mNumSlic);
+    b.putInt("bitmap", mBitmapID);
 
     if( mObjectType==1 )
       {
-      mMesh = new MeshFlat(mNumCols,mNumRows);
+      b.putString("string", "");
       }
     else
       {
@@ -383,25 +231,11 @@ public class Effects3DActivity extends Activity
       for(int i=0; i<mNumRows*mNumCols; i++)
         str += mShape[i] ? "1" : "0";
 
-      mMesh = new MeshCubes(mNumCols, str, mNumSlic);
+      b.putString("string", str);
       }
 
-    mMesh.setShowNormals(mShowNormal);
-    mTexture= new DistortedTexture(mNumCols,mNumRows);
-    mEffects= new DistortedEffects();
-
-    final View view = getLayoutInflater().inflate(R.layout.effects3dlayout, null);
-
-    setContentView(view);
-
-    mViewPager = findViewById(R.id.effects3d_viewpager);
-    mViewPager.setOffscreenPageLimit(2);
-    mPager = new Effects3DTabViewPager(this, getFragmentManager() );
-    mViewPager.setAdapter(mPager);
-    TabLayout tabLayout = findViewById(R.id.effects3d_sliding_tabs);
-    tabLayout.setupWithViewPager(mViewPager);
-
-    resetData();
+    mainInt.putExtras(b);
+    startActivity(mainInt);
     }
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
@@ -436,169 +270,10 @@ public class Effects3DActivity extends Activity
     {
     }
 
-///////////////////////////////////////////////////////////////////////////////////////////////////
-
-  public int getWidth()
-    {
-    return mTexture==null ? 0: mTexture.getWidth();
-    }
-
-///////////////////////////////////////////////////////////////////////////////////////////////////
-
-  public int getHeight()
-    {
-    return mTexture==null ? 0: mTexture.getHeight();
-    }
-
-///////////////////////////////////////////////////////////////////////////////////////////////////
-
-  public int getDepth()
-    {
-    return mTexture==null ? 0: mTexture.getDepth(mMesh);
-    }
-
-///////////////////////////////////////////////////////////////////////////////////////////////////
-
-  public int getScreenWidth()
-    {
-    return 0;
-    }
-
-///////////////////////////////////////////////////////////////////////////////////////////////////
-
-  void resetData()
-    {
-    mCenterX = 0.5f*getWidth();
-    mCenterY = 0.5f*getHeight();
-    mRegionX = 0;
-    mRegionY = 0;
-    mRegionR = getWidth()/2;
-
-    Effects3DSurfaceView view = findViewById(R.id.effects3dSurfaceView);
-    Effects3DRenderer renderer= view.getRenderer();
-
-    renderer.setCenter( mCenterX, mCenterY, mCenterZ );
-    renderer.setRegion( mRegionX, mRegionY, mRegionR );
-    renderer.mQuat1.set(0,0,0,1);
-    renderer.mQuat2.set(0,0,0,1);
-    }
-
-///////////////////////////////////////////////////////////////////////////////////////////////////
-// 'second screen' methods
-///////////////////////////////////////////////////////////////////////////////////////////////////
-
-  public DistortedEffects getEffects()
-    {
-    return mEffects;
-    }
-
-///////////////////////////////////////////////////////////////////////////////////////////////////
-
-  public void newEffect(View v)
-    {
-    mPager.newEffect(v,mViewPager.getCurrentItem());
-    }
-
-///////////////////////////////////////////////////////////////////////////////////////////////////
-
-  public void removeAll(View v)
-    {
-    mPager.removeAll(v,mViewPager.getCurrentItem());
-    }
-
-///////////////////////////////////////////////////////////////////////////////////////////////////
-
-  public void remove(View v)
-    {
-    mPager.remove(v,mViewPager.getCurrentItem());
-    }
-
-///////////////////////////////////////////////////////////////////////////////////////////////////
-
-  boolean getShowCenter()
-    {
-    return mShowCenter;
-    }
-
-///////////////////////////////////////////////////////////////////////////////////////////////////
-
-  boolean getShowRegion()
-    {
-    return mShowRegion;
-    }
-
-///////////////////////////////////////////////////////////////////////////////////////////////////
-
-  public void showCenter(View view)
-    {
-    CheckBox box = (CheckBox)view;
-    mShowCenter = box.isChecked();
-
-    Effects3DSurfaceView sv = findViewById(R.id.effects3dSurfaceView);
-    sv.getRenderer().showRegionAndCenter(mShowRegion,mShowCenter);
-    }
-
-///////////////////////////////////////////////////////////////////////////////////////////////////
-
-  public void showRegion(View view)
-    {
-    CheckBox box = (CheckBox)view;
-    mShowRegion = box.isChecked();
-
-    Effects3DSurfaceView sv = findViewById(R.id.effects3dSurfaceView);
-    sv.getRenderer().showRegionAndCenter(mShowRegion,mShowCenter);
-    }
-
-///////////////////////////////////////////////////////////////////////////////////////////////////
-
-  public void showNormal(View view)
-    {
-    CheckBox box = (CheckBox)view;
-    mShowNormal = box.isChecked();
-
-    if ( mMesh!=null )
-      {
-      mMesh.setShowNormals(mShowNormal);
-      }
-    }
-
-///////////////////////////////////////////////////////////////////////////////////////////////////
-
-  public void triggerOIT(View view)
-    {
-    CheckBox box = (CheckBox)view;
-    mUseOIT = box.isChecked();
-
-    Effects3DSurfaceView sv = findViewById(R.id.effects3dSurfaceView);
-    sv.getRenderer().useOIT(mUseOIT);
-    }
-
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 // Overrides
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
-  @Override
-  protected void onPause()
-    {
-    GLSurfaceView mView = findViewById(R.id.effects3dSurfaceView);
-    if( mView!=null ) mView.onPause();
-
-    Distorted.onPause();
-    super.onPause();
-    }
-
-///////////////////////////////////////////////////////////////////////////////////////////////////
-    
-  @Override
-  protected void onResume()
-    {
-    super.onResume();
-    GLSurfaceView mView = findViewById(R.id.effects3dSurfaceView);
-    if( mView!=null ) mView.onResume();
-    }
-
-///////////////////////////////////////////////////////////////////////////////////////////////////
-    
   @Override
   public void onWindowFocusChanged(boolean hasFocus)
     {
@@ -610,14 +285,4 @@ public class Effects3DActivity extends Activity
 
     if( !mGridInitialized ) setGrid();
     }
-
-///////////////////////////////////////////////////////////////////////////////////////////////////
-    
-  @Override
-  protected void onDestroy()
-    {
-    Distorted.onDestroy();
-    super.onDestroy();
-    }
-
   }
diff --git a/src/main/java/org/distorted/examples/effects3d/Effects3DActivity2.java b/src/main/java/org/distorted/examples/effects3d/Effects3DActivity2.java
new file mode 100644
index 0000000..79b7a63
--- /dev/null
+++ b/src/main/java/org/distorted/examples/effects3d/Effects3DActivity2.java
@@ -0,0 +1,409 @@
+///////////////////////////////////////////////////////////////////////////////////////////////////
+// Copyright 2016 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.examples.effects3d;
+
+import android.app.Activity;
+import android.graphics.Bitmap;
+import android.graphics.BitmapFactory;
+import android.graphics.Canvas;
+import android.graphics.Paint;
+import android.opengl.GLSurfaceView;
+import android.os.Bundle;
+import android.support.design.widget.TabLayout;
+import android.support.v4.view.ViewPager;
+import android.view.View;
+import android.widget.CheckBox;
+
+import org.distorted.examples.R;
+import org.distorted.library.effect.EffectType;
+import org.distorted.library.main.Distorted;
+import org.distorted.library.main.DistortedEffects;
+import org.distorted.library.main.DistortedTexture;
+import org.distorted.library.main.MeshCubes;
+import org.distorted.library.main.MeshFlat;
+import org.distorted.library.main.MeshObject;
+
+import java.io.IOException;
+import java.io.InputStream;
+
+///////////////////////////////////////////////////////////////////////////////////////////////////
+
+public class Effects3DActivity2 extends Activity
+  {
+  private int mNumCols;
+  private int mNumRows;
+  private int mNumSlic;
+  private int mObjectType;
+  private int mBitmapID;
+  private String mString;
+
+  private DistortedTexture mTexture;
+  private MeshObject mMesh;
+  private Bitmap mBitmap;
+
+  private float mCenterX, mCenterY, mCenterZ;
+  private float mRegionX, mRegionY, mRegionR;
+  private DistortedEffects mEffects;
+  private ViewPager mViewPager;
+  private Effects3DTabViewPager mPager;
+
+  private static boolean mShowCenter = true;
+  private static boolean mShowRegion = true;
+  private static boolean mShowNormal = true;
+  private static boolean mUseOIT     = false;
+
+///////////////////////////////////////////////////////////////////////////////////////////////////
+
+  @Override
+  protected void onCreate(Bundle savedState)
+    {
+    super.onCreate(savedState);
+
+    Bundle b = getIntent().getExtras();
+
+    mObjectType = b.getInt("type");
+    mNumCols    = b.getInt("cols");
+    mNumRows    = b.getInt("rows");
+    mNumSlic    = b.getInt("slices");
+    mBitmapID   = b.getInt("bitmap");
+    mString     = b.getString("string");
+
+    DistortedEffects.setMax(EffectType.VERTEX ,20);    // those have to be called before
+    DistortedEffects.setMax(EffectType.FRAGMENT,3);    // any DistortedEffect get created!
+
+    if( mObjectType==1 ) mMesh = new MeshFlat(mNumCols,mNumRows);
+    else                 mMesh = new MeshCubes(mNumCols, mString, mNumSlic);
+
+    mMesh.setShowNormals(mShowNormal);
+    mTexture= new DistortedTexture(mNumCols,mNumRows);
+    mEffects= new DistortedEffects();
+
+    final View view = getLayoutInflater().inflate(R.layout.effects3dlayout, null);
+
+    setContentView(view);
+
+    mViewPager = findViewById(R.id.effects3d_viewpager);
+    mViewPager.setOffscreenPageLimit(2);
+    mPager = new Effects3DTabViewPager(this, getFragmentManager() );
+    mViewPager.setAdapter(mPager);
+    TabLayout tabLayout = findViewById(R.id.effects3d_sliding_tabs);
+    tabLayout.setupWithViewPager(mViewPager);
+
+    resetData();
+    }
+
+///////////////////////////////////////////////////////////////////////////////////////////////////
+
+  public DistortedTexture getTexture()
+    {
+    return mTexture;
+    }
+
+///////////////////////////////////////////////////////////////////////////////////////////////////
+
+  public MeshObject getMesh()
+    {
+    return mMesh;
+    }
+
+///////////////////////////////////////////////////////////////////////////////////////////////////
+
+  public Bitmap getBitmap()
+    {
+    if( mBitmap==null )
+      {
+      if( mBitmapID!=-1)
+        {
+        InputStream is = getResources().openRawResource(mBitmapID);
+
+        try
+          {
+          mBitmap = BitmapFactory.decodeStream(is);
+          }
+        finally
+          {
+          try
+            {
+            is.close();
+            }
+          catch(IOException e) { }
+          }
+        }
+      else
+        {
+        final int W = 64*mNumCols;
+        final int H = 64*mNumRows;
+
+        Paint paint = new Paint();
+        mBitmap = Bitmap.createBitmap(W,H, Bitmap.Config.ARGB_8888);
+        Canvas canvas = new Canvas(mBitmap);
+
+        paint.setAntiAlias(true);
+        paint.setTextAlign(Paint.Align.CENTER);
+        paint.setColor(0xff008800);
+        paint.setStyle(Paint.Style.FILL);
+        canvas.drawRect(0, 0, W, H, paint);
+        paint.setColor(0xffffffff);
+
+        for(int i=0; i<=mNumCols ; i++ ) canvas.drawRect(W*i/mNumCols-1, 0, W*i/mNumCols + 1, H, paint);
+        for(int i=0; i<=mNumRows ; i++ ) canvas.drawRect( 0, H*i/mNumRows-1, W,  H*i/mNumRows+1, paint);
+        }
+      }
+
+    return mBitmap;
+    }
+
+///////////////////////////////////////////////////////////////////////////////////////////////////
+
+  public void setRegion(float x, float y, float r)
+    {
+    mRegionX = x;
+    mRegionY =-y;
+    mRegionR = r;
+
+    Effects3DSurfaceView view = findViewById(R.id.effects3dSurfaceView);
+    view.getRenderer().setRegion(mRegionX, mRegionY, mRegionR);
+    }
+
+///////////////////////////////////////////////////////////////////////////////////////////////////
+
+  public void setCenter(float x, float y, float z)
+    {
+    mCenterX = x;
+    mCenterY = y;
+    mCenterZ = z;
+
+    Effects3DSurfaceView view = findViewById(R.id.effects3dSurfaceView);
+    view.getRenderer().setCenter( mCenterX, mCenterY, mCenterZ );
+    }
+
+///////////////////////////////////////////////////////////////////////////////////////////////////
+
+  public float getCenterX()
+    {
+    return mCenterX;
+    }
+
+///////////////////////////////////////////////////////////////////////////////////////////////////
+
+  public float getCenterY()
+    {
+    return mCenterY;
+    }
+
+///////////////////////////////////////////////////////////////////////////////////////////////////
+
+  public float getCenterZ()
+    {
+    return mCenterZ;
+    }
+
+///////////////////////////////////////////////////////////////////////////////////////////////////
+
+  public float getRegionX()
+    {
+    return mRegionX;
+    }
+
+///////////////////////////////////////////////////////////////////////////////////////////////////
+
+  public float getRegionY()
+    {
+    return mRegionY;
+    }
+
+///////////////////////////////////////////////////////////////////////////////////////////////////
+
+  public float getRegionR()
+    {
+    return mRegionR;
+    }
+
+///////////////////////////////////////////////////////////////////////////////////////////////////
+
+  public int getWidth()
+    {
+    return mTexture==null ? 0: mTexture.getWidth();
+    }
+
+///////////////////////////////////////////////////////////////////////////////////////////////////
+
+  public int getHeight()
+    {
+    return mTexture==null ? 0: mTexture.getHeight();
+    }
+
+///////////////////////////////////////////////////////////////////////////////////////////////////
+
+  public int getDepth()
+    {
+    return mTexture==null ? 0: mTexture.getDepth(mMesh);
+    }
+
+///////////////////////////////////////////////////////////////////////////////////////////////////
+
+  public int getScreenWidth()
+    {
+    return 0;
+    }
+
+///////////////////////////////////////////////////////////////////////////////////////////////////
+
+  void resetData()
+    {
+    mCenterX = 0.5f*getWidth();
+    mCenterY = 0.5f*getHeight();
+    mRegionX = 0;
+    mRegionY = 0;
+    mRegionR = getWidth()/2;
+
+    Effects3DSurfaceView view = findViewById(R.id.effects3dSurfaceView);
+    Effects3DRenderer renderer= view.getRenderer();
+
+    renderer.setCenter( mCenterX, mCenterY, mCenterZ );
+    renderer.setRegion( mRegionX, mRegionY, mRegionR );
+    renderer.mQuat1.set(0,0,0,1);
+    renderer.mQuat2.set(0,0,0,1);
+    }
+
+///////////////////////////////////////////////////////////////////////////////////////////////////
+// 'second screen' methods
+///////////////////////////////////////////////////////////////////////////////////////////////////
+
+  public DistortedEffects getEffects()
+    {
+    return mEffects;
+    }
+
+///////////////////////////////////////////////////////////////////////////////////////////////////
+
+  public void newEffect(View v)
+    {
+    mPager.newEffect(v,mViewPager.getCurrentItem());
+    }
+
+///////////////////////////////////////////////////////////////////////////////////////////////////
+
+  public void removeAll(View v)
+    {
+    mPager.removeAll(v,mViewPager.getCurrentItem());
+    }
+
+///////////////////////////////////////////////////////////////////////////////////////////////////
+
+  public void remove(View v)
+    {
+    mPager.remove(v,mViewPager.getCurrentItem());
+    }
+
+///////////////////////////////////////////////////////////////////////////////////////////////////
+
+  boolean getShowCenter()
+    {
+    return mShowCenter;
+    }
+
+///////////////////////////////////////////////////////////////////////////////////////////////////
+
+  boolean getShowRegion()
+    {
+    return mShowRegion;
+    }
+
+///////////////////////////////////////////////////////////////////////////////////////////////////
+
+  public void showCenter(View view)
+    {
+    CheckBox box = (CheckBox)view;
+    mShowCenter = box.isChecked();
+
+    Effects3DSurfaceView sv = findViewById(R.id.effects3dSurfaceView);
+    sv.getRenderer().showRegionAndCenter(mShowRegion,mShowCenter);
+    }
+
+///////////////////////////////////////////////////////////////////////////////////////////////////
+
+  public void showRegion(View view)
+    {
+    CheckBox box = (CheckBox)view;
+    mShowRegion = box.isChecked();
+
+    Effects3DSurfaceView sv = findViewById(R.id.effects3dSurfaceView);
+    sv.getRenderer().showRegionAndCenter(mShowRegion,mShowCenter);
+    }
+
+///////////////////////////////////////////////////////////////////////////////////////////////////
+
+  public void showNormal(View view)
+    {
+    CheckBox box = (CheckBox)view;
+    mShowNormal = box.isChecked();
+
+    if ( mMesh!=null )
+      {
+      mMesh.setShowNormals(mShowNormal);
+      }
+    }
+
+///////////////////////////////////////////////////////////////////////////////////////////////////
+
+  public void triggerOIT(View view)
+    {
+    CheckBox box = (CheckBox)view;
+    mUseOIT = box.isChecked();
+
+    Effects3DSurfaceView sv = findViewById(R.id.effects3dSurfaceView);
+    sv.getRenderer().useOIT(mUseOIT);
+    }
+
+///////////////////////////////////////////////////////////////////////////////////////////////////
+// Overrides
+///////////////////////////////////////////////////////////////////////////////////////////////////
+
+  @Override
+  protected void onPause()
+    {
+    GLSurfaceView mView = findViewById(R.id.effects3dSurfaceView);
+    if( mView!=null ) mView.onPause();
+
+    Distorted.onPause();
+    super.onPause();
+    }
+
+///////////////////////////////////////////////////////////////////////////////////////////////////
+    
+  @Override
+  protected void onResume()
+    {
+    super.onResume();
+    GLSurfaceView mView = findViewById(R.id.effects3dSurfaceView);
+    if( mView!=null ) mView.onResume();
+    }
+
+///////////////////////////////////////////////////////////////////////////////////////////////////
+    
+  @Override
+  protected void onDestroy()
+    {
+    Distorted.onDestroy();
+    super.onDestroy();
+    }
+
+  }
diff --git a/src/main/java/org/distorted/examples/effects3d/Effects3DEffect.java b/src/main/java/org/distorted/examples/effects3d/Effects3DEffect.java
index 78d516e..b9ba6ee 100644
--- a/src/main/java/org/distorted/examples/effects3d/Effects3DEffect.java
+++ b/src/main/java/org/distorted/examples/effects3d/Effects3DEffect.java
@@ -61,7 +61,7 @@ import java.lang.ref.WeakReference;
 
 class Effects3DEffect implements SeekBar.OnSeekBarChangeListener
   {
-  private WeakReference<Effects3DActivity> mAct;
+  private WeakReference<Effects3DActivity2> mAct;
 
   private EffectName mName;
   private int[] mInter;
@@ -285,7 +285,7 @@ class Effects3DEffect implements SeekBar.OnSeekBarChangeListener
 
   private void fillCenterStatics()
     {
-    Effects3DActivity act = mAct.get();
+    Effects3DActivity2 act = mAct.get();
 
     float x = (mInterCenter[0]*0.012f - 0.1f)*act.getWidth();
     float y = (mInterCenter[1]*0.012f - 0.1f)*act.getHeight();
@@ -318,7 +318,7 @@ class Effects3DEffect implements SeekBar.OnSeekBarChangeListener
 
   private void fillRegionStatics()
     {
-    Effects3DActivity act = mAct.get();
+    Effects3DActivity2 act = mAct.get();
 
     float factorX = act.getWidth() / 100.0f;
     float factorY = act.getHeight()/ 100.0f;
@@ -357,7 +357,7 @@ class Effects3DEffect implements SeekBar.OnSeekBarChangeListener
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
-  Effects3DEffect(EffectName name, Effects3DActivity act)
+  Effects3DEffect(EffectName name, Effects3DActivity2 act)
     {
     mAct = new WeakReference<>(act);
     mName = name;
@@ -439,7 +439,7 @@ class Effects3DEffect implements SeekBar.OnSeekBarChangeListener
     {
     SeekBar[] seek = new SeekBar[mDimension];
 
-    Effects3DActivity act = mAct.get();
+    Effects3DActivity2 act = mAct.get();
 
     switch(mDimension)
       {
@@ -512,7 +512,7 @@ class Effects3DEffect implements SeekBar.OnSeekBarChangeListener
 
   View createRegion()
     {
-    Effects3DActivity act = mAct.get();
+    Effects3DActivity2 act = mAct.get();
 
     mRegion = act.getLayoutInflater().inflate(R.layout.effectregion, null);
 
@@ -547,7 +547,7 @@ class Effects3DEffect implements SeekBar.OnSeekBarChangeListener
 
   View createCenter()
     {
-    Effects3DActivity act = mAct.get();
+    Effects3DActivity2 act = mAct.get();
 
     mCenter = act.getLayoutInflater().inflate(R.layout.effectcenter, null);
 
@@ -657,7 +657,7 @@ class Effects3DEffect implements SeekBar.OnSeekBarChangeListener
 
     if( fromUser )
       {
-      Effects3DActivity act = mAct.get();
+      Effects3DActivity2 act = mAct.get();
 
       boolean show = (mName.getType()==EffectType.VERTEX);
       boolean showR= (show && act.getShowRegion());
diff --git a/src/main/java/org/distorted/examples/effects3d/Effects3DRenderer.java b/src/main/java/org/distorted/examples/effects3d/Effects3DRenderer.java
index 3f60cda..db98dd7 100644
--- a/src/main/java/org/distorted/examples/effects3d/Effects3DRenderer.java
+++ b/src/main/java/org/distorted/examples/effects3d/Effects3DRenderer.java
@@ -81,7 +81,7 @@ class Effects3DRenderer implements GLSurfaceView.Renderer
       {
       mView = v;
 
-      Effects3DActivity act = (Effects3DActivity)v.getContext();
+      Effects3DActivity2 act = (Effects3DActivity2)v.getContext();
 
       mRotateCen      = new Static3D(0,0,0);
       mMoveObject     = new Static3D(0,0,0);
@@ -230,7 +230,7 @@ class Effects3DRenderer implements GLSurfaceView.Renderer
         factorCen  = (0.08f*width)/centerSize;
         }
 
-      Effects3DActivity act = (Effects3DActivity)mView.getContext();
+      Effects3DActivity2 act = (Effects3DActivity2)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;
@@ -258,7 +258,7 @@ class Effects3DRenderer implements GLSurfaceView.Renderer
 
     public void onSurfaceCreated(GL10 glUnused, EGLConfig config)
       {
-      Effects3DActivity act = (Effects3DActivity)mView.getContext();
+      Effects3DActivity2 act = (Effects3DActivity2)mView.getContext();
 
       InputStream isB = act.getResources().openRawResource(R.raw.water);
       InputStream isC = act.getResources().openRawResource(R.raw.center);
diff --git a/src/main/java/org/distorted/examples/effects3d/Effects3DTab.java b/src/main/java/org/distorted/examples/effects3d/Effects3DTab.java
index cfe13a7..7905136 100644
--- a/src/main/java/org/distorted/examples/effects3d/Effects3DTab.java
+++ b/src/main/java/org/distorted/examples/effects3d/Effects3DTab.java
@@ -86,7 +86,7 @@ public class Effects3DTab extends Fragment implements AdapterView.OnItemSelected
               break;
       }
 
-    Effects3DActivity act = (Effects3DActivity)getActivity();
+    Effects3DActivity2 act = (Effects3DActivity2)getActivity();
     mEffects = act.getEffects();
 
     createEffectNames(mType);
@@ -122,7 +122,7 @@ public class Effects3DTab extends Fragment implements AdapterView.OnItemSelected
 
     android.util.Log.e("tab", "onResume, type="+mType.name());
 
-    Effects3DActivity act = (Effects3DActivity)getActivity();
+    Effects3DActivity2 act = (Effects3DActivity2)getActivity();
 
     ArrayAdapter<String> adapterEffect = new ArrayAdapter<>( act, android.R.layout.simple_spinner_item, mEffectStrings);
     adapterEffect.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
@@ -158,7 +158,7 @@ public class Effects3DTab extends Fragment implements AdapterView.OnItemSelected
 
   private void resetData()
     {
-    Effects3DActivity act = (Effects3DActivity)getActivity();
+    Effects3DActivity2 act = (Effects3DActivity2)getActivity();
     Effects3DSurfaceView view = act.findViewById(R.id.effects3dSurfaceView);
     view.getRenderer().showRegionAndCenter(false,false);
     }
@@ -167,7 +167,7 @@ public class Effects3DTab extends Fragment implements AdapterView.OnItemSelected
 
   void newEffect()
     {
-    Effects3DActivity act = (Effects3DActivity)getActivity();
+    Effects3DActivity2 act = (Effects3DActivity2)getActivity();
     Effects3DEffect eff = new Effects3DEffect(mEffectNames[mEffectAdd], act );
     mList.add(eff);
 
@@ -223,7 +223,7 @@ public class Effects3DTab extends Fragment implements AdapterView.OnItemSelected
 
   void removeAll()
     {
-    Effects3DActivity act = (Effects3DActivity)getActivity();
+    Effects3DActivity2 act = (Effects3DActivity2)getActivity();
 
     mList.clear();
     LinearLayout layout = act.findViewById(mLayout);
@@ -242,7 +242,7 @@ public class Effects3DTab extends Fragment implements AdapterView.OnItemSelected
       {
       if( effect.thisView(v) )
         {
-        Effects3DActivity act = (Effects3DActivity)getActivity();
+        Effects3DActivity2 act = (Effects3DActivity2)getActivity();
         LinearLayout layout = act.findViewById(mLayout);
         View view;
 
diff --git a/src/main/java/org/distorted/examples/effects3d/Effects3DTabViewPager.java b/src/main/java/org/distorted/examples/effects3d/Effects3DTabViewPager.java
index 366ceae..8e85b2b 100644
--- a/src/main/java/org/distorted/examples/effects3d/Effects3DTabViewPager.java
+++ b/src/main/java/org/distorted/examples/effects3d/Effects3DTabViewPager.java
@@ -35,12 +35,12 @@ public class Effects3DTabViewPager extends FragmentPagerAdapter
   {
   private static final int NUM_TABS = 3;
 
-  private WeakReference<Effects3DActivity> mAct;
+  private WeakReference<Effects3DActivity2> mAct;
   private Effects3DTab[] mTab;
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
-  public Effects3DTabViewPager(Effects3DActivity act, FragmentManager fm)
+  public Effects3DTabViewPager(Effects3DActivity2 act, FragmentManager fm)
     {
     super(fm);
     mAct = new WeakReference<>(act);
