commit 9c3e749e960c8223b3fee01e4ae6e9f5832b6797
Author: Leszek Koltunski <leszek@koltunski.pl>
Date:   Fri Jun 29 23:50:16 2018 +0100

    Make the Cubes App capable of testing unprocessed OIT.

diff --git a/src/main/java/org/distorted/examples/cubes/CubesActivity.java b/src/main/java/org/distorted/examples/cubes/CubesActivity.java
index 368caee..d89a133 100644
--- a/src/main/java/org/distorted/examples/cubes/CubesActivity.java
+++ b/src/main/java/org/distorted/examples/cubes/CubesActivity.java
@@ -30,15 +30,19 @@ import android.opengl.GLSurfaceView;
 import android.os.Bundle;
 import android.view.Gravity;
 import android.view.View;
+import android.widget.AdapterView;
+import android.widget.ArrayAdapter;
 import android.widget.Button;
 import android.widget.LinearLayout;
 import android.widget.NumberPicker;
 import android.widget.NumberPicker.OnValueChangeListener;
+import android.widget.SeekBar;
+import android.widget.Spinner;
 import android.widget.TableRow;
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
-public class CubesActivity extends Activity implements View.OnClickListener
+public class CubesActivity extends Activity implements View.OnClickListener, SeekBar.OnSeekBarChangeListener, AdapterView.OnItemSelectedListener
 {
     private static final int COLOR_OFF = 0xffffe81f;
     private static final int COLOR_ON  = 0xff0000ff;
@@ -61,11 +65,11 @@ public class CubesActivity extends Activity implements View.OnClickListener
 
       setContentView(R.layout.cubespickerlayout);
       
-      mLay = (LinearLayout)findViewById(R.id.cubespicker_buttongrid);
+      mLay = findViewById(R.id.cubespicker_buttongrid);
       
-      mColsPicker = (NumberPicker)findViewById(R.id.cubespicker_cols);
-      mRowsPicker = (NumberPicker)findViewById(R.id.cubespicker_rows);
-      mSlicPicker = (NumberPicker)findViewById(R.id.cubespicker_slices);
+      mColsPicker = findViewById(R.id.cubespicker_cols);
+      mRowsPicker = findViewById(R.id.cubespicker_rows);
+      mSlicPicker = findViewById(R.id.cubespicker_slices);
 
       mColsPicker.setMaxValue(40);
       mColsPicker.setMinValue( 0);
@@ -178,7 +182,7 @@ public class CubesActivity extends Activity implements View.OnClickListener
     @Override
     protected void onPause() 
       {
-      GLSurfaceView mView = (GLSurfaceView) this.findViewById(R.id.cubesSurfaceView);
+      GLSurfaceView mView = this.findViewById(R.id.cubesSurfaceView);
       if( mView!=null ) mView.onPause();
 
       Distorted.onPause();
@@ -192,7 +196,7 @@ public class CubesActivity extends Activity implements View.OnClickListener
       {
       super.onResume();
       
-      GLSurfaceView mView = (GLSurfaceView) this.findViewById(R.id.cubesSurfaceView);
+      GLSurfaceView mView = this.findViewById(R.id.cubesSurfaceView);
       if( mView!=null ) mView.onResume();  
       }
     
@@ -218,8 +222,65 @@ public class CubesActivity extends Activity implements View.OnClickListener
       mTexture = new DistortedTexture(mNumCols,mNumRows);
 
       setContentView(R.layout.cubeslayout);
+
+      Spinner renderSpinner  = findViewById(R.id.cubes_spinnerMode);
+      renderSpinner.setOnItemSelectedListener(this);
+
+      String[] objectBitmap = new String[] { "Render: Normal", "Render: OIT" };
+
+      ArrayAdapter<String> adapterBitmap = new ArrayAdapter<>(this, android.R.layout.simple_spinner_item, objectBitmap);
+      adapterBitmap.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
+      renderSpinner.setAdapter(adapterBitmap);
+
+      SeekBar transparencyBar = findViewById(R.id.cubesTransparency);
+
+      transparencyBar.setOnSeekBarChangeListener(this);
+
+      CubesSurfaceView view = this.findViewById(R.id.cubesSurfaceView);
+      view.getRenderer().setTransparency(50);
+      transparencyBar.setProgress(50);
+      }
+
+///////////////////////////////////////////////////////////////////////////////////////////////////
+
+    public void onItemSelected(AdapterView<?> parent, View view, int pos, long id)
+      {
+      CubesSurfaceView v = this.findViewById(R.id.cubesSurfaceView);
+      CubesRenderer renderer = v.getRenderer();
+
+      switch(parent.getId())
+        {
+        case R.id.cubes_spinnerMode: renderer.setRenderModeToOIT(pos==1);
+                                     break;
+        }
+      }
+
+///////////////////////////////////////////////////////////////////////////////////////////////////
+
+    public void onNothingSelected(AdapterView<?> parent)
+      {
+      }
+
+///////////////////////////////////////////////////////////////////////////////////////////////////
+
+    public void onProgressChanged(SeekBar bar, int progress, boolean fromUser)
+      {
+      switch (bar.getId())
+        {
+        case R.id.cubesTransparency: CubesSurfaceView view = this.findViewById(R.id.cubesSurfaceView);
+                                     view.getRenderer().setTransparency(progress);
+                                     break;
+        }
       }
 
+///////////////////////////////////////////////////////////////////////////////////////////////////
+
+    public void onStartTrackingTouch(SeekBar bar) { }
+
+///////////////////////////////////////////////////////////////////////////////////////////////////
+
+    public void onStopTrackingTouch(SeekBar bar)  { }
+
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
     public DistortedTexture getTexture()
diff --git a/src/main/java/org/distorted/examples/cubes/CubesRenderer.java b/src/main/java/org/distorted/examples/cubes/CubesRenderer.java
index c1d6872..1b5c7d8 100644
--- a/src/main/java/org/distorted/examples/cubes/CubesRenderer.java
+++ b/src/main/java/org/distorted/examples/cubes/CubesRenderer.java
@@ -27,6 +27,7 @@ import javax.microedition.khronos.opengles.GL10;
 
 import org.distorted.examples.R;
 
+import org.distorted.library.effect.FragmentEffectAlpha;
 import org.distorted.library.effect.MatrixEffectMove;
 import org.distorted.library.effect.MatrixEffectQuaternion;
 import org.distorted.library.effect.MatrixEffectScale;
@@ -35,6 +36,7 @@ import org.distorted.library.main.DistortedScreen;
 import org.distorted.library.main.DistortedTexture;
 import org.distorted.library.main.MeshObject;
 import org.distorted.library.type.DynamicQuat;
+import org.distorted.library.type.Static1D;
 import org.distorted.library.type.Static4D;
 import org.distorted.library.type.Static3D;
 import org.distorted.library.main.Distorted;
@@ -54,16 +56,19 @@ class CubesRenderer implements GLSurfaceView.Renderer
     private DistortedScreen mScreen;
     private int mObjWidth, mObjHeight, mObjDepth;
     private Static3D mMove, mScale, mCenter;
+    private Static1D mAlpha;
 
     Static4D mQuat1, mQuat2;
     int mScreenMin;
-    
+
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
     CubesRenderer(GLSurfaceView v)
       {
       mView = v;
 
+      mAlpha = new Static1D(1.0f);
+
       mMove = new Static3D(0,0,0);
       mScale= new Static3D(1,1,1);
       mCenter=new Static3D(0,0,0);
@@ -91,8 +96,10 @@ class CubesRenderer implements GLSurfaceView.Renderer
       mEffects.apply( new MatrixEffectScale(mScale));
       mEffects.apply( new MatrixEffectQuaternion(quatInt1, mCenter) );
       mEffects.apply( new MatrixEffectQuaternion(quatInt2, mCenter) );
+      mEffects.apply( new FragmentEffectAlpha(mAlpha));
 
       mScreen = new DistortedScreen();
+      mScreen.glClearColor(1.0f,1.0f,1.0f,0.0f);
       }
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
@@ -114,6 +121,20 @@ class CubesRenderer implements GLSurfaceView.Renderer
       mScreen.resize(width, height);
       }
 
+///////////////////////////////////////////////////////////////////////////////////////////////////
+
+    void setRenderModeToOIT(boolean oit)
+      {
+      mScreen.setOrderIndependentTransparency(oit);
+      }
+
+///////////////////////////////////////////////////////////////////////////////////////////////////
+
+    void setTransparency(int level)
+      {
+      mAlpha.set((float)level/100.0f);
+      }
+
 ///////////////////////////////////////////////////////////////////////////////////////////////////
     
     public void onSurfaceCreated(GL10 glUnused, EGLConfig config) 
@@ -139,6 +160,8 @@ class CubesRenderer implements GLSurfaceView.Renderer
       mScreen.detachAll();
       mScreen.attach(mTexture,mEffects,mMesh);
 
+      FragmentEffectAlpha.enable();
+
       try
         {
         Distorted.onCreate(mView.getContext());
diff --git a/src/main/java/org/distorted/examples/cubes/CubesSurfaceView.java b/src/main/java/org/distorted/examples/cubes/CubesSurfaceView.java
index 25d04d3..97d9a8d 100644
--- a/src/main/java/org/distorted/examples/cubes/CubesSurfaceView.java
+++ b/src/main/java/org/distorted/examples/cubes/CubesSurfaceView.java
@@ -55,7 +55,14 @@ class CubesSurfaceView extends GLSurfaceView
         Toast.makeText(context, R.string.example_rotate_toast , Toast.LENGTH_SHORT).show();
         }
       }
-    
+
+///////////////////////////////////////////////////////////////////////////////////////////////////
+
+    public CubesRenderer getRenderer()
+      {
+      return mRenderer;
+      }
+
 ///////////////////////////////////////////////////////////////////////////////////////////////////
     
     @Override public boolean onTouchEvent(MotionEvent event) 
diff --git a/src/main/java/org/distorted/examples/multiblur/MultiblurActivity.java b/src/main/java/org/distorted/examples/multiblur/MultiblurActivity.java
index faa4c7e..98225d9 100644
--- a/src/main/java/org/distorted/examples/multiblur/MultiblurActivity.java
+++ b/src/main/java/org/distorted/examples/multiblur/MultiblurActivity.java
@@ -47,8 +47,8 @@ public class MultiblurActivity extends Activity implements SeekBar.OnSeekBarChan
       super.onCreate(savedState);
       setContentView(R.layout.multiblurlayout);
 
-      SeekBar distanceBar = (SeekBar)findViewById(R.id.multiblurDistanceSeek);
-      SeekBar rangeBar    = (SeekBar)findViewById(R.id.multiblurRangeSeek);
+      SeekBar distanceBar = findViewById(R.id.multiblurDistanceSeek);
+      SeekBar rangeBar    = findViewById(R.id.multiblurRangeSeek);
 
       distanceBar.setOnSeekBarChangeListener(this);
       rangeBar.setOnSeekBarChangeListener(this);
@@ -60,7 +60,7 @@ public class MultiblurActivity extends Activity implements SeekBar.OnSeekBarChan
         mQuality = EffectQuality.HIGHEST.ordinal();
         }
 
-      Spinner typeSpinner  = (Spinner)findViewById(R.id.multiblur_spinnerQuality);
+      Spinner typeSpinner  = findViewById(R.id.multiblur_spinnerQuality);
       typeSpinner.setOnItemSelectedListener(this);
 
       String[] objectType = new String[] {"Quality Highiest", "Quality High", "Quality Medium", "Quality Low"};
@@ -69,7 +69,7 @@ public class MultiblurActivity extends Activity implements SeekBar.OnSeekBarChan
       adapterType.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
       typeSpinner.setAdapter(adapterType);
 
-      Spinner bitmapSpinner  = (Spinner)findViewById(R.id.multiblur_spinnerMode);
+      Spinner bitmapSpinner  = findViewById(R.id.multiblur_spinnerMode);
       bitmapSpinner.setOnItemSelectedListener(this);
 
       String[] objectBitmap = new String[] { "Render: Normal", "Render: OIT" };
diff --git a/src/main/res/layout/cubeslayout.xml b/src/main/res/layout/cubeslayout.xml
index 825afa1..3d273a4 100644
--- a/src/main/res/layout/cubeslayout.xml
+++ b/src/main/res/layout/cubeslayout.xml
@@ -11,4 +11,28 @@
         android:layout_height="0dp"
         android:layout_weight="1.00" />
 
+    <LinearLayout
+        android:id="@+id/linearLayout3"
+        android:layout_width="fill_parent"
+        android:layout_height="wrap_content"
+        android:gravity="center|fill_horizontal"
+        android:orientation="horizontal"
+        android:background="@color/blue">
+
+        <SeekBar
+            android:id="@+id/cubesTransparency"
+            android:layout_weight="0.5"
+            android:layout_width="0dp"
+            android:layout_height="50dp"
+            android:paddingLeft="10dp"
+            android:paddingRight="10dp" />
+
+        <Spinner
+            android:layout_width="0dp"
+            android:layout_height="50dp"
+            android:layout_weight="0.5"
+            android:id="@+id/cubes_spinnerMode"
+            />
+    </LinearLayout>
+
 </LinearLayout>
