commit af6625439317b0aba6f3c9493037a5c0c9a0b595
Author: leszek <leszek@koltunski.pl>
Date:   Mon Feb 27 23:06:03 2017 +0000

    Fixes for z-fighting.

diff --git a/src/main/java/org/distorted/examples/effects3d/Effects3DRenderer.java b/src/main/java/org/distorted/examples/effects3d/Effects3DRenderer.java
index 0ddc792..84c109e 100644
--- a/src/main/java/org/distorted/examples/effects3d/Effects3DRenderer.java
+++ b/src/main/java/org/distorted/examples/effects3d/Effects3DRenderer.java
@@ -48,6 +48,9 @@ import javax.microedition.khronos.opengles.GL10;
 
 class Effects3DRenderer implements GLSurfaceView.Renderer
 {
+    private static final float FOV = 70.0f;
+    private static final float NEAR = 0.1f;
+
     private GLSurfaceView mView;
     private DistortedTexture mObjectTexture, mBackgroundTexture, mCenterTexture, mRegionTexture;
     private DistortedEffects mObjectEffects, mBackgroundEffects, mCenterEffects, mRegionEffects;
@@ -87,7 +90,6 @@ class Effects3DRenderer implements GLSurfaceView.Renderer
       MeshObject meshO   = act.getMesh();
       MeshFlat quad      = new MeshFlat(1,1);
 
-
       mObjWidth = mObjectTexture.getWidth();
       mObjHeight= mObjectTexture.getHeight();
       mObjDepth = mObjectTexture.getDepth(meshO);
@@ -117,6 +119,7 @@ class Effects3DRenderer implements GLSurfaceView.Renderer
       mRegionNode = new DistortedNode(mRegionTexture, mRegionEffects, quad);
 
       mScreen = new DistortedScreen();
+      mScreen.setProjection(FOV, NEAR);
       mScreen.attach(mBackgroundTexture, mBackgroundEffects, quad );
       mScreen.attach(mObjectTexture    , mObjectEffects    , meshO);
       }
@@ -230,7 +233,8 @@ class Effects3DRenderer implements GLSurfaceView.Renderer
       float factorBackX = ((float)width)/backgroundSize;
       float factorBackY = ((float)height)/backgroundSize;
 
-      mBackgroundEffects.move(new Static3D( -width/2, -height/2,-mFactorObj*(mObjWidth+mObjHeight)/2) );
+      // quite tricky: move the background exactly to the FAR plane! (see DistortedOutputSurface.setProjection() )
+      mBackgroundEffects.move(new Static3D( -width/2, -height/2, -height*(1.0f-NEAR)/(2.0f*(float)Math.tan(FOV*Math.PI/360))) );
       mBackgroundEffects.scale(new Static3D(2*factorBackX, 2*factorBackY, 1.0f) );
 
       mScreen.resize(width, height);
diff --git a/src/main/java/org/distorted/examples/fbo/FBORenderer.java b/src/main/java/org/distorted/examples/fbo/FBORenderer.java
index 76e4f6d..f9407a7 100644
--- a/src/main/java/org/distorted/examples/fbo/FBORenderer.java
+++ b/src/main/java/org/distorted/examples/fbo/FBORenderer.java
@@ -74,7 +74,8 @@ class FBORenderer implements GLSurfaceView.Renderer
         if( depth ) mRoot.glEnable (GLES30.GL_DEPTH_TEST);
         else        mRoot.glDisable(GLES30.GL_DEPTH_TEST);
 
-        mRoot.glDepthMask(depth);
+        // TODO for some reason this does not work - investigate.
+        //mRoot.glDepthMask(depth);
 
         // we can also, to save memory, delete/recreate
         // the depth buffer each time. This is optional.
diff --git a/src/main/java/org/distorted/examples/projection/ProjectionActivity.java b/src/main/java/org/distorted/examples/projection/ProjectionActivity.java
index b2252dd..d39f505 100644
--- a/src/main/java/org/distorted/examples/projection/ProjectionActivity.java
+++ b/src/main/java/org/distorted/examples/projection/ProjectionActivity.java
@@ -33,7 +33,7 @@ import android.widget.SeekBar.OnSeekBarChangeListener;
 
 public class ProjectionActivity extends Activity implements OnSeekBarChangeListener
 {
-    private TextView textF, textX, textY;
+    private TextView textF, textN;
     
 ///////////////////////////////////////////////////////////////////////////////////////////////////
     
@@ -44,18 +44,14 @@ public class ProjectionActivity extends Activity implements OnSeekBarChangeListe
       setContentView(R.layout.projectionlayout);
 
       textF = (TextView)findViewById(R.id.projectionTextFOV);
-      textX = (TextView)findViewById(R.id.projectionTextX);
-      textY = (TextView)findViewById(R.id.projectionTextY);
+      textN = (TextView)findViewById(R.id.projectionTextNear);
 
       SeekBar bar;
 
       bar = (SeekBar)findViewById(R.id.projectionSeekFOV);
       bar.setOnSeekBarChangeListener(this);
       bar.setProgress(50);
-      bar = (SeekBar)findViewById(R.id.projectionSeekX);
-      bar.setOnSeekBarChangeListener(this);
-      bar.setProgress(50);
-      bar = (SeekBar)findViewById(R.id.projectionSeekY);
+      bar = (SeekBar)findViewById(R.id.projectionSeekNear);
       bar.setOnSeekBarChangeListener(this);
       bar.setProgress(50);
       }
@@ -95,21 +91,18 @@ public class ProjectionActivity extends Activity implements OnSeekBarChangeListe
     
     public void onProgressChanged(SeekBar bar, int progress, boolean fromUser) 
       {
-      int ret;
+      float ret;
       ProjectionSurfaceView view = (ProjectionSurfaceView)findViewById(R.id.surfaceViewProjection);
       ProjectionRenderer renderer = view.getRenderer();
 
       switch (bar.getId()) 
         {
-        case R.id.projectionSeekFOV: ret = renderer.setFOV(progress);
-                                     textF.setText(getString(R.string.fov_placeholder,ret));
-                                     break;
-        case R.id.projectionSeekX  : ret = renderer.setX(progress);
-                                     textX.setText(getString(R.string.x_placeholder,ret));
-                                     break;
-        case R.id.projectionSeekY  : ret = renderer.setY(progress);
-                                     textY.setText(getString(R.string.y_placeholder,ret));
-                                     break;
+        case R.id.projectionSeekFOV : ret = renderer.setFOV(progress);
+                                      textF.setText(getString(R.string.fov_placeholder,(int)ret));
+                                      break;
+        case R.id.projectionSeekNear: ret = renderer.setNear(progress);
+                                      textN.setText(getString(R.string.near_placeholder,ret));
+                                      break;
         }
       }
 
diff --git a/src/main/java/org/distorted/examples/projection/ProjectionRenderer.java b/src/main/java/org/distorted/examples/projection/ProjectionRenderer.java
index 51c48bd..297a350 100644
--- a/src/main/java/org/distorted/examples/projection/ProjectionRenderer.java
+++ b/src/main/java/org/distorted/examples/projection/ProjectionRenderer.java
@@ -45,8 +45,7 @@ class ProjectionRenderer implements GLSurfaceView.Renderer
    private DistortedEffects mEffects;
    private DistortedScreen mScreen;
 
-   private float mF, mX, mY;
-   private int mWidth, mHeight;
+   private float mF, mNear;
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
@@ -59,29 +58,20 @@ class ProjectionRenderer implements GLSurfaceView.Renderer
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
-   int setFOV(int f)
+   float setFOV(int f)
       {
       mF = f;
-      mScreen.setProjection(mF,mX,mY);
-      return (int)mF;
+      mScreen.setProjection(mF,mNear);
+      return mF;
       }
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
-   int setX(int x)
+   float setNear(int near)
       {
-      mX = (x-50)*0.02f*mWidth;
-      mScreen.setProjection(mF,mX,mY);
-      return (int)mX;
-      }
-
-///////////////////////////////////////////////////////////////////////////////////////////////////
-
-   int setY(int y)
-      {
-      mY = (y-50)*0.02f*mHeight;
-      mScreen.setProjection(mF,mX,mY);
-      return (int)mY;
+      mNear = near/100.0f;
+      mScreen.setProjection(mF,mNear);
+      return mNear;
       }
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
@@ -96,10 +86,7 @@ class ProjectionRenderer implements GLSurfaceView.Renderer
     
    public void onSurfaceChanged(GL10 glUnused, int width, int height) 
       {
-      mWidth = width;
-      mHeight= height;
-
-      mScreen.setProjection(mF,mX,mY);
+      mScreen.setProjection(mF,mNear);
       mEffects.abortAllEffects();
 
       Paint paint = new Paint();
diff --git a/src/main/java/org/distorted/examples/starwars/StarWarsRenderer.java b/src/main/java/org/distorted/examples/starwars/StarWarsRenderer.java
index 9ceaade..6d7ec92 100644
--- a/src/main/java/org/distorted/examples/starwars/StarWarsRenderer.java
+++ b/src/main/java/org/distorted/examples/starwars/StarWarsRenderer.java
@@ -137,7 +137,7 @@ class StarWarsRenderer implements GLSurfaceView.Renderer, EffectListener
       }
 
     mScreen = new DistortedScreen();
-    mScreen.setProjection(60.0f, 0.0f, 0.0f);
+    mScreen.setProjection(60.0f, 0.02f);
     }
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
diff --git a/src/main/res/layout/projectionlayout.xml b/src/main/res/layout/projectionlayout.xml
index 3c0edfe..b71d264 100644
--- a/src/main/res/layout/projectionlayout.xml
+++ b/src/main/res/layout/projectionlayout.xml
@@ -46,7 +46,7 @@
         android:paddingTop="5dp" >
 
         <TextView
-            android:id="@+id/projectionTextX"
+            android:id="@+id/projectionTextNear"
             android:layout_width="0dp"
             android:layout_height="wrap_content"
             android:layout_weight="0.5"
@@ -54,33 +54,7 @@
             android:textAppearance="?android:attr/textAppearanceMedium" />
 
         <SeekBar
-            android:id="@+id/projectionSeekX"
-            android:layout_width="wrap_content"
-            android:layout_height="wrap_content"
-            android:layout_weight="1"
-            android:paddingStart="15dp"
-            android:paddingEnd="15dp" />
-    </LinearLayout>
-
-    <LinearLayout
-        android:id="@+id/linearLayout3"
-        android:layout_width="fill_parent"
-        android:layout_height="wrap_content"
-        android:gravity="center|fill_horizontal"
-        android:orientation="horizontal"
-        android:paddingBottom="5dp"
-        android:paddingTop="5dp" >
-
-        <TextView
-            android:id="@+id/projectionTextY"
-            android:layout_width="0dp"
-            android:layout_height="wrap_content"
-            android:layout_weight="0.5"
-            android:paddingStart="15dp"
-            android:textAppearance="?android:attr/textAppearanceMedium" />
-
-        <SeekBar
-            android:id="@+id/projectionSeekY"
+            android:id="@+id/projectionSeekNear"
             android:layout_width="wrap_content"
             android:layout_height="wrap_content"
             android:layout_weight="1"
diff --git a/src/main/res/values/strings.xml b/src/main/res/values/strings.xml
index 75b95d0..1e1758a 100644
--- a/src/main/res/values/strings.xml
+++ b/src/main/res/values/strings.xml
@@ -72,8 +72,7 @@
     <string name="size_placeholder">Size %1$.1f</string>
     <string name="hips_placeholder">Hips %1$d</string>
     <string name="fov_placeholder">FOV: %1$d</string>
-    <string name="x_placeholder">X: %1$d</string>
-    <string name="y_placeholder">Y: %1$d</string>
+    <string name="near_placeholder">Near: %1$.2f</string>
     <string name="wind_placeholder">Wind: %1$d</string>
     <string name="blur_placeholder">Blur: %1$d</string>
 
