commit 29aba2d1191a00a3666a5cb343af53ff84c4ac49
Author: Leszek Koltunski <leszek@koltunski.pl>
Date:   Mon Jul 2 16:00:52 2018 +0100

    Transparency App: try to postprocess and not-postprocess the Transparent Surfaces.

diff --git a/src/main/java/org/distorted/examples/transparency/TransparencyActivity.java b/src/main/java/org/distorted/examples/transparency/TransparencyActivity.java
index bfa4f71..ccd31bb 100644
--- a/src/main/java/org/distorted/examples/transparency/TransparencyActivity.java
+++ b/src/main/java/org/distorted/examples/transparency/TransparencyActivity.java
@@ -25,6 +25,7 @@ import android.os.Bundle;
 import android.view.View;
 import android.widget.AdapterView;
 import android.widget.ArrayAdapter;
+import android.widget.CheckBox;
 import android.widget.SeekBar;
 import android.widget.Spinner;
 
@@ -45,8 +46,8 @@ public class TransparencyActivity extends Activity implements SeekBar.OnSeekBarC
       super.onCreate(savedState);
       setContentView(R.layout.transparencylayout);
 
-      SeekBar barRed    = (SeekBar)findViewById(R.id.transparencySeekRed);
-      SeekBar barYellow = (SeekBar)findViewById(R.id.transparencySeekYellow);
+      SeekBar barRed    = findViewById(R.id.transparencySeekRed);
+      SeekBar barYellow = findViewById(R.id.transparencySeekYellow);
 
       barRed.setOnSeekBarChangeListener(this);
       barYellow.setOnSeekBarChangeListener(this);
@@ -58,7 +59,7 @@ public class TransparencyActivity extends Activity implements SeekBar.OnSeekBarC
         privateRenderFirst(0);
         }
 
-      Spinner typeSpinner  = (Spinner)findViewById(R.id.transparency_spinnerFirst);
+      Spinner typeSpinner  = findViewById(R.id.transparency_spinnerFirst);
       typeSpinner.setOnItemSelectedListener(this);
 
       String[] objectType = new String[] {"First: Red", "First: Yellow"};
@@ -67,7 +68,7 @@ public class TransparencyActivity extends Activity implements SeekBar.OnSeekBarC
       adapterType.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
       typeSpinner.setAdapter(adapterType);
 
-      Spinner bitmapSpinner  = (Spinner)findViewById(R.id.transparency_spinnerMode);
+      Spinner bitmapSpinner  = findViewById(R.id.transparency_spinnerMode);
       bitmapSpinner.setOnItemSelectedListener(this);
 
       String[] objectBitmap = new String[] { "Render: Normal", "Render: OIT" };
@@ -101,7 +102,7 @@ public class TransparencyActivity extends Activity implements SeekBar.OnSeekBarC
     @Override
     protected void onPause() 
       {
-      GLSurfaceView view = (GLSurfaceView) this.findViewById(R.id.transparencySurfaceView);
+      GLSurfaceView view = this.findViewById(R.id.transparencySurfaceView);
       view.onPause();
       Distorted.onPause();
       super.onPause();
@@ -113,7 +114,7 @@ public class TransparencyActivity extends Activity implements SeekBar.OnSeekBarC
     protected void onResume() 
       {
       super.onResume();
-      GLSurfaceView view = (GLSurfaceView) this.findViewById(R.id.transparencySurfaceView);
+      GLSurfaceView view = this.findViewById(R.id.transparencySurfaceView);
       view.onResume();
       }
     
@@ -152,10 +153,10 @@ public class TransparencyActivity extends Activity implements SeekBar.OnSeekBarC
       {
       switch (bar.getId())
         {
-        case R.id.transparencySeekRed:    TransparencySurfaceView view0 = (TransparencySurfaceView) this.findViewById(R.id.transparencySurfaceView);
+        case R.id.transparencySeekRed:    TransparencySurfaceView view0 = this.findViewById(R.id.transparencySurfaceView);
                                           view0.getRenderer().setTransparency(0, (float)progress/100 );
                                           break;
-        case R.id.transparencySeekYellow: TransparencySurfaceView view1 = (TransparencySurfaceView) this.findViewById(R.id.transparencySurfaceView);
+        case R.id.transparencySeekYellow: TransparencySurfaceView view1 = this.findViewById(R.id.transparencySurfaceView);
                                           view1.getRenderer().setTransparency(1, (float)progress/100 );
                                           break;
         }
@@ -173,7 +174,7 @@ public class TransparencyActivity extends Activity implements SeekBar.OnSeekBarC
 
     private void setRenderModeToOIT(boolean oit)
       {
-      TransparencySurfaceView view = (TransparencySurfaceView) this.findViewById(R.id.transparencySurfaceView);
+      TransparencySurfaceView view = this.findViewById(R.id.transparencySurfaceView);
       TransparencyRenderer renderer= view.getRenderer();
 
       renderer.setRenderModeToOIT(oit);
@@ -183,10 +184,26 @@ public class TransparencyActivity extends Activity implements SeekBar.OnSeekBarC
 
     private void privateRenderFirst(int index)
       {
-      TransparencySurfaceView view = (TransparencySurfaceView) this.findViewById(R.id.transparencySurfaceView);
+      TransparencySurfaceView view = this.findViewById(R.id.transparencySurfaceView);
       TransparencyRenderer renderer= view.getRenderer();
 
       renderer.setRenderFirst(index);
       mRenderFirst = index;
       }
+
+
+///////////////////////////////////////////////////////////////////////////////////////////////////
+
+    public void onClick(View view)
+      {
+      CheckBox box = (CheckBox)view;
+      boolean checked = box.isChecked();
+      TransparencySurfaceView sView = this.findViewById(R.id.transparencySurfaceView);
+
+      switch(box.getId())
+        {
+        case R.id.transparencyCheckBox0  : sView.getRenderer().setPostprocess(0,checked); break;
+        case R.id.transparencyCheckBox1  : sView.getRenderer().setPostprocess(1,checked); break;
+        }
+      }
 }
diff --git a/src/main/java/org/distorted/examples/transparency/TransparencyRenderer.java b/src/main/java/org/distorted/examples/transparency/TransparencyRenderer.java
index eb65e0a..f86ca83 100644
--- a/src/main/java/org/distorted/examples/transparency/TransparencyRenderer.java
+++ b/src/main/java/org/distorted/examples/transparency/TransparencyRenderer.java
@@ -61,6 +61,9 @@ class TransparencyRenderer implements GLSurfaceView.Renderer
     private Static1D[]  mAlphaVector;
     private DistortedScreen mScreen;
     private Static3D mMove, mScale, mCenter;
+    private PostprocessEffectBlur[] mBlur;
+    private boolean[] mBlurApplied;
+    private DistortedEffects[] mEffects;
 
     Static4D mQuat1, mQuat2;
     int mScreenMin;
@@ -83,10 +86,11 @@ class TransparencyRenderer implements GLSurfaceView.Renderer
       mAlphaVector  = new Static1D[NUM_OBJECTS];
       mNode         = new DistortedNode[NUM_OBJECTS];
       mTex          = new DistortedTexture[NUM_OBJECTS];
+      mBlur         = new PostprocessEffectBlur[NUM_OBJECTS];
+      mEffects      = new DistortedEffects[NUM_OBJECTS];
+      mBlurApplied  = new boolean[NUM_OBJECTS];
 
       FragmentEffectAlpha[] alpha  = new FragmentEffectAlpha[NUM_OBJECTS];
-      DistortedEffects[] effects   = new DistortedEffects[NUM_OBJECTS];
-      PostprocessEffectBlur[] blur = new PostprocessEffectBlur[NUM_OBJECTS];
 
       mMove  = new Static3D(0,0,0);
       mScale = new Static3D(1.0f,1.0f,1.0f);
@@ -103,23 +107,44 @@ class TransparencyRenderer implements GLSurfaceView.Renderer
         mTex[i]          = new DistortedTexture(OBJ_SIZE,OBJ_SIZE);
         mMoveVector[i]   = new Static3D(0,0,0);
         mAlphaVector[i]  = new Static1D(0.5f);
+        mBlur[i]         = new PostprocessEffectBlur(new Static1D(0));
+        mBlurApplied[i]  = true;
         alpha[i]         = new FragmentEffectAlpha(mAlphaVector[i]);
-        blur[i]          = new PostprocessEffectBlur(new Static1D(0));
-        effects[i]       = new DistortedEffects();
-
-        effects[i].apply(blur[i]);
-        effects[i].apply(alpha[i]);
-        effects[i].apply(moveEffect);
-        effects[i].apply(scaleEffect);
-        effects[i].apply(quatEffect1);
-        effects[i].apply(quatEffect2);
-        effects[i].apply(new MatrixEffectMove(mMoveVector[i]));
-
-        mNode[i] = new DistortedNode(mTex[i], effects[i], mesh );
+        mEffects[i]      = new DistortedEffects();
+
+        mEffects[i].apply(mBlur[i]);
+        mEffects[i].apply(alpha[i]);
+        mEffects[i].apply(moveEffect);
+        mEffects[i].apply(scaleEffect);
+        mEffects[i].apply(quatEffect1);
+        mEffects[i].apply(quatEffect2);
+        mEffects[i].apply(new MatrixEffectMove(mMoveVector[i]));
+
+        mNode[i] = new DistortedNode(mTex[i], mEffects[i], mesh );
         mScreen.attach(mNode[i]);
         }
       }
 
+
+///////////////////////////////////////////////////////////////////////////////////////////////////
+
+    void setPostprocess(int object, boolean doIt)
+      {
+      if( object>=0 && object<NUM_OBJECTS)
+        {
+        if( doIt && !mBlurApplied[object] )
+          {
+          mBlurApplied[object] = true;
+          mEffects[object].apply(mBlur[object]);
+          }
+        if( !doIt && mBlurApplied[object] )
+          {
+          mBlurApplied[object] = false;
+          mEffects[object].abortEffect(mBlur[object]);
+          }
+        }
+      }
+
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
     void setTransparency(int object, float level)
diff --git a/src/main/res/layout/transparencylayout.xml b/src/main/res/layout/transparencylayout.xml
index 9431253..b9b5b8e 100644
--- a/src/main/res/layout/transparencylayout.xml
+++ b/src/main/res/layout/transparencylayout.xml
@@ -30,19 +30,51 @@
             />
     </LinearLayout>
 
-    <SeekBar
-        android:id="@+id/transparencySeekRed"
-        android:background="@color/red"
-        android:layout_height="50dp"
+    <LinearLayout
         android:layout_width="fill_parent"
-        android:paddingLeft="10dp"
-        android:paddingRight="10dp" />
-    <SeekBar
-        android:id="@+id/transparencySeekYellow"
-        android:background="@color/yellow"
         android:layout_height="50dp"
+        android:orientation="horizontal">
+
+        <CheckBox
+            android:layout_height="fill_parent"
+            android:layout_width="wrap_content"
+            android:background="@color/red"
+            android:id="@+id/transparencyCheckBox0"
+            android:paddingLeft="10dp"
+            android:onClick="onClick"
+            android:checked="true"/>
+
+        <SeekBar
+            android:id="@+id/transparencySeekRed"
+            android:background="@color/red"
+            android:layout_height="fill_parent"
+            android:layout_width="fill_parent"
+            android:paddingLeft="10dp"
+            android:paddingRight="10dp" />
+
+    </LinearLayout>
+
+    <LinearLayout
         android:layout_width="fill_parent"
-        android:paddingLeft="10dp"
-        android:paddingRight="10dp" />
+        android:layout_height="50dp"
+        android:orientation="horizontal">
 
+        <CheckBox
+            android:layout_height="fill_parent"
+            android:layout_width="wrap_content"
+            android:background="@color/yellow"
+            android:id="@+id/transparencyCheckBox1"
+            android:paddingLeft="10dp"
+            android:onClick="onClick"
+            android:checked="true"/>
+
+        <SeekBar
+            android:id="@+id/transparencySeekYellow"
+            android:background="@color/yellow"
+            android:layout_height="fill_parent"
+            android:layout_width="fill_parent"
+            android:paddingLeft="10dp"
+            android:paddingRight="10dp" />
+
+    </LinearLayout>
 </LinearLayout>
\ No newline at end of file
