commit bddd4b2dec1423d01d3155ba234726d2e4b7f19b
Author: Leszek Koltunski <leszek@koltunski.pl>
Date:   Tue Jul 3 14:31:52 2018 +0100

    Add OIT to the Effects3D app.

diff --git a/src/main/java/org/distorted/examples/effects3d/Effects3DActivity.java b/src/main/java/org/distorted/examples/effects3d/Effects3DActivity.java
index becf9aa..c572466 100644
--- a/src/main/java/org/distorted/examples/effects3d/Effects3DActivity.java
+++ b/src/main/java/org/distorted/examples/effects3d/Effects3DActivity.java
@@ -88,6 +88,7 @@ public class Effects3DActivity extends Activity
   private static boolean mShowCenter = true;
   private static boolean mShowRegion = true;
   private static boolean mShowNormal = true;
+  private static boolean mUseOIT     = false;
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
@@ -102,11 +103,11 @@ public class Effects3DActivity extends Activity
 
     setContentView(R.layout.objectpickerlayout);
 
-    mLay = (LinearLayout)findViewById(R.id.objectpicker_buttongrid);
+    mLay = findViewById(R.id.objectpicker_buttongrid);
 
-    mColsPicker = (NumberPicker)findViewById(R.id.objectpicker_cols);
-    mRowsPicker = (NumberPicker)findViewById(R.id.objectpicker_rows);
-    mSlicPicker = (NumberPicker)findViewById(R.id.objectpicker_slices);
+    mColsPicker = findViewById(R.id.objectpicker_cols);
+    mRowsPicker = findViewById(R.id.objectpicker_rows);
+    mSlicPicker = findViewById(R.id.objectpicker_slices);
 
     mColsPicker.setMaxValue(40);
     mColsPicker.setMinValue( 0);
@@ -145,7 +146,7 @@ public class Effects3DActivity extends Activity
     mObjectType = 0;
     mGridInitialized = false;
 
-    Spinner typeSpinner  = (Spinner)findViewById(R.id.objectpicker_spinnerType);
+    Spinner typeSpinner  = findViewById(R.id.objectpicker_spinnerType);
     typeSpinner.setOnItemSelectedListener(this);
 
     String[] objectType = new String[] {"Mesh: Cubes", "Mesh: Flat"};
@@ -154,7 +155,7 @@ public class Effects3DActivity extends Activity
     adapterType.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
     typeSpinner.setAdapter(adapterType);
 
-    Spinner bitmapSpinner  = (Spinner)findViewById(R.id.objectpicker_spinnerBitmap);
+    Spinner bitmapSpinner  = findViewById(R.id.objectpicker_spinnerBitmap);
     bitmapSpinner.setOnItemSelectedListener(this);
 
     String[] objectBitmap = new String[] { "Texture: Grid", "Texture: Girl", "Texture: Dog", "Texture: Cat",
@@ -362,7 +363,7 @@ public class Effects3DActivity extends Activity
     mRegionY =-y;
     mRegionR = r;
 
-    Effects3DSurfaceView view = (Effects3DSurfaceView)findViewById(R.id.effects3dSurfaceView);
+    Effects3DSurfaceView view = findViewById(R.id.effects3dSurfaceView);
     view.getRenderer().setRegion(mRegionX, mRegionY, mRegionR);
     }
 
@@ -374,7 +375,7 @@ public class Effects3DActivity extends Activity
     mCenterY = y;
     mCenterZ = z;
 
-    Effects3DSurfaceView view = (Effects3DSurfaceView)findViewById(R.id.effects3dSurfaceView);
+    Effects3DSurfaceView view = findViewById(R.id.effects3dSurfaceView);
     view.getRenderer().setCenter( mCenterX, mCenterY, mCenterZ );
     }
 
@@ -454,7 +455,7 @@ public class Effects3DActivity extends Activity
 
     for(int i=0; i<mEffectNames.length; i++) effects[i] = mEffectNames[i].name();
 
-    Spinner effectSpinner = (Spinner)findViewById(R.id.effects3dspinner );
+    Spinner effectSpinner = findViewById(R.id.effects3dspinner );
     effectSpinner.setOnItemSelectedListener(this);
 
     ArrayAdapter<String> adapterEffect = new ArrayAdapter<>(this, android.R.layout.simple_spinner_item, effects);
@@ -541,7 +542,7 @@ public class Effects3DActivity extends Activity
     mSupportsRegion =false;
     mSupportsCenter =false;
 
-    Effects3DSurfaceView view = (Effects3DSurfaceView)findViewById(R.id.effects3dSurfaceView);
+    Effects3DSurfaceView view = findViewById(R.id.effects3dSurfaceView);
     view.getRenderer().showRegionAndCenter(false,false);
     }
 
@@ -553,7 +554,7 @@ public class Effects3DActivity extends Activity
     Effects3DEffect eff = new Effects3DEffect(mEffectNames[mEffectAdd], this);
     mList.add(eff);
 
-    LinearLayout layout = (LinearLayout)findViewById(R.id.effects3dlayout);
+    LinearLayout layout = findViewById(R.id.effects3dlayout);
     View view = eff.createView();
     layout.addView(view);
 
@@ -572,7 +573,7 @@ public class Effects3DActivity extends Activity
     eff.apply(mEffects);
 
     boolean show = (mEffectNames[mEffectAdd].getType()==EffectType.VERTEX);
-    Effects3DSurfaceView sv = (Effects3DSurfaceView)findViewById(R.id.effects3dSurfaceView);
+    Effects3DSurfaceView sv = findViewById(R.id.effects3dSurfaceView);
     sv.getRenderer().showRegionAndCenter( (show && mShowRegion) , (show && mShowCenter) );
     }
 
@@ -581,14 +582,14 @@ public class Effects3DActivity extends Activity
   public void removeAll(View v)
     {
     mList.clear();
-    LinearLayout layout = (LinearLayout)findViewById(R.id.effects3dlayout);
+    LinearLayout layout = findViewById(R.id.effects3dlayout);
     layout.removeAllViews();
     mEffects.abortByType(EffectType.VERTEX);
     mEffects.abortByType(EffectType.FRAGMENT);
 
     resetData();
 
-    Effects3DSurfaceView view = (Effects3DSurfaceView)findViewById(R.id.effects3dSurfaceView);
+    Effects3DSurfaceView view = findViewById(R.id.effects3dSurfaceView);
     Effects3DRenderer renderer= view.getRenderer();
 
     renderer.setCenter( mCenterX, mCenterY, mCenterZ );
@@ -605,7 +606,7 @@ public class Effects3DActivity extends Activity
       {
       if( effect.thisView(v) )
         {
-        LinearLayout layout = (LinearLayout)findViewById(R.id.effects3dlayout);
+        LinearLayout layout = findViewById(R.id.effects3dlayout);
         View view;
 
         view = effect.getEffect();
@@ -646,7 +647,7 @@ public class Effects3DActivity extends Activity
       CheckBox box = (CheckBox)view;
       mShowCenter = box.isChecked();
 
-      Effects3DSurfaceView sv = (Effects3DSurfaceView)findViewById(R.id.effects3dSurfaceView);
+      Effects3DSurfaceView sv = findViewById(R.id.effects3dSurfaceView);
       sv.getRenderer().showRegionAndCenter(mShowRegion,mShowCenter);
       }
 
@@ -657,7 +658,7 @@ public class Effects3DActivity extends Activity
       CheckBox box = (CheckBox)view;
       mShowRegion = box.isChecked();
 
-      Effects3DSurfaceView sv = (Effects3DSurfaceView)findViewById(R.id.effects3dSurfaceView);
+      Effects3DSurfaceView sv = findViewById(R.id.effects3dSurfaceView);
       sv.getRenderer().showRegionAndCenter(mShowRegion,mShowCenter);
       }
 
@@ -674,13 +675,24 @@ public class Effects3DActivity extends Activity
         }
       }
 
+///////////////////////////////////////////////////////////////////////////////////////////////////
+
+    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 = (GLSurfaceView)findViewById(R.id.effects3dSurfaceView);
+    GLSurfaceView mView = findViewById(R.id.effects3dSurfaceView);
     if( mView!=null ) mView.onPause();
 
     Distorted.onPause();
@@ -693,7 +705,7 @@ public class Effects3DActivity extends Activity
   protected void onResume()
     {
     super.onResume();
-    GLSurfaceView mView = (GLSurfaceView)findViewById(R.id.effects3dSurfaceView);
+    GLSurfaceView mView = findViewById(R.id.effects3dSurfaceView);
     if( mView!=null ) mView.onResume();
     }
 
diff --git a/src/main/java/org/distorted/examples/effects3d/Effects3DRenderer.java b/src/main/java/org/distorted/examples/effects3d/Effects3DRenderer.java
index 036c644..3f60cda 100644
--- a/src/main/java/org/distorted/examples/effects3d/Effects3DRenderer.java
+++ b/src/main/java/org/distorted/examples/effects3d/Effects3DRenderer.java
@@ -195,6 +195,13 @@ class Effects3DRenderer implements GLSurfaceView.Renderer
       mRegionScalePoint.set(mFactorReg,mFactorReg,mFactorReg);
       }
 
+///////////////////////////////////////////////////////////////////////////////////////////////////
+
+    void useOIT(boolean use)
+      {
+      mScreen.setOrderIndependentTransparency(use);
+      }
+
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
     public void onDrawFrame(GL10 glUnused)
diff --git a/src/main/res/layout/effects3dlayout.xml b/src/main/res/layout/effects3dlayout.xml
index a2d6c4b..cc068a9 100644
--- a/src/main/res/layout/effects3dlayout.xml
+++ b/src/main/res/layout/effects3dlayout.xml
@@ -44,6 +44,16 @@
             android:onClick="showNormal"
             android:text="@string/show_normal"
             android:textSize="12sp"/>
+
+        <CheckBox
+            android:id="@+id/effects3dCheckBoxOIT"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:layout_weight="1"
+            android:checked="false"
+            android:onClick="triggerOIT"
+            android:text="@string/oit"
+            android:textSize="12sp"/>
     </LinearLayout>
 
     <LinearLayout
diff --git a/src/main/res/values/strings.xml b/src/main/res/values/strings.xml
index da10ce1..d9cf2ea 100644
--- a/src/main/res/values/strings.xml
+++ b/src/main/res/values/strings.xml
@@ -67,9 +67,10 @@
     <string name="quality1">High</string>
     <string name="quality2">Medium</string>
     <string name="quality3">Low</string>
-    <string name="show_center">Show Center</string>
-    <string name="show_region">Show Region</string>
-    <string name="show_normal">Show Normals</string>
+    <string name="show_center">Center</string>
+    <string name="show_region">Region</string>
+    <string name="show_normal">Normals</string>
+    <string name="oit">OIT</string>
     <string name="screen">Screen</string>
     <string name="framebuffer">Framebuffer</string>
 
