commit 8ff32d4d718b3da451e7e7ab31e075a7f819b7b9
Author: Leszek Koltunski <leszek@distorted.org>
Date:   Tue Aug 9 13:11:57 2016 +0100

    Finally fix the 'when rendering though an FBO, the other side of triangles is visible'

diff --git a/src/main/java/org/distorted/examples/monalisa/MonaLisaRenderer.java b/src/main/java/org/distorted/examples/monalisa/MonaLisaRenderer.java
index 2ec1134..7cfab7d 100644
--- a/src/main/java/org/distorted/examples/monalisa/MonaLisaRenderer.java
+++ b/src/main/java/org/distorted/examples/monalisa/MonaLisaRenderer.java
@@ -45,12 +45,29 @@ class MonaLisaRenderer implements GLSurfaceView.Renderer
 {
     private GLSurfaceView mView;
     private DistortedBitmap monaLisa;
+    private Static2D pLeft, pRight;
+    private Static4D rLeft, rRight;
+    private Dynamic3D dLeft, dRight;
+
+    private int bmpHeight, bmpWidth;
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
     public MonaLisaRenderer(GLSurfaceView v) 
       {
       mView = v;
+
+      pLeft = new Static2D( 90, 258);
+      pRight= new Static2D(176, 255);
+
+      rLeft = new Static4D(-10,-10,25,25);
+      rRight= new Static4D( 10, -5,25,25);
+      dLeft = new Dynamic3D(1000,0.0f);
+      dRight= new Dynamic3D(1000,0.0f);
+      dLeft.add ( new Static3D(  0,  0,0) );
+      dLeft.add ( new Static3D(-20,-20,0) );
+      dRight.add( new Static3D(  0,  0,0) );
+      dRight.add( new Static3D( 20,-10,0) );
       }
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
@@ -59,7 +76,7 @@ class MonaLisaRenderer implements GLSurfaceView.Renderer
       {
       GLES20.glClearColor(0.0f, 0.0f, 0.0f, 1.0f);
       GLES20.glClear( GLES20.GL_DEPTH_BUFFER_BIT | GLES20.GL_COLOR_BUFFER_BIT);
-      
+
       monaLisa.draw(System.currentTimeMillis());
       }
 
@@ -68,7 +85,21 @@ class MonaLisaRenderer implements GLSurfaceView.Renderer
     public void onSurfaceChanged(GL10 glUnused, int width, int height) 
       { 
       monaLisa.abortEffects(EffectTypes.MATRIX);
-      monaLisa.move( new Static3D((width-200)/2, 10, 0) );
+
+      if( bmpHeight/bmpWidth > height/width )
+        {
+        int w = (height*bmpWidth)/bmpHeight;
+        float factor = (float)height/bmpHeight;
+        monaLisa.move( new Static3D((width-w)/2,0,0) );
+        monaLisa.scale(factor);
+        }
+      else
+        {
+        int h = (width*bmpHeight)/bmpWidth;
+        float factor = (float)width/bmpWidth;
+        monaLisa.move( new Static3D(0,(height-h)/2,0) );
+        monaLisa.scale(factor);
+        }
 
       Distorted.onSurfaceChanged(width, height); 
       }
@@ -93,8 +124,12 @@ class MonaLisaRenderer implements GLSurfaceView.Renderer
         catch(IOException e) { }
         }  
 
-      monaLisa = new DistortedBitmap(200,200,1);
-      monaLisa.setBitmap(bitmap);
+      bmpHeight = bitmap.getHeight();
+      bmpWidth  = bitmap.getWidth();
+
+      monaLisa = new DistortedBitmap(bitmap, 9);
+      monaLisa.distort( dLeft, pLeft , rLeft );
+      monaLisa.distort(dRight, pRight, rRight);
 
       try
         {
diff --git a/src/main/java/org/distorted/examples/olimpic/OlimpicRenderer.java b/src/main/java/org/distorted/examples/olimpic/OlimpicRenderer.java
index aa271e6..e6762fe 100644
--- a/src/main/java/org/distorted/examples/olimpic/OlimpicRenderer.java
+++ b/src/main/java/org/distorted/examples/olimpic/OlimpicRenderer.java
@@ -103,7 +103,7 @@ class OlimpicRenderer implements GLSurfaceView.Renderer
         tmp = (DistortedBitmap)mCircleNode[i].getObject();
         tmp.move( new Static3D(positions[2*i], positions[2*i+1], 0) );
         tmp.rotate( mRot, axis, center );
-        tmp.chroma( new Static1D(0.8f), new Static3D(colors[3*i],colors[3*i+1], colors[3*i+2]) );
+        tmp.chroma( new Static1D(0.5f), new Static3D(colors[3*i],colors[3*i+1], colors[3*i+2]) );
         }
       }
 
diff --git a/src/main/java/org/distorted/examples/vertex3d/Vertex3DRenderer.java b/src/main/java/org/distorted/examples/vertex3d/Vertex3DRenderer.java
index 8b87ac1..d10a894 100644
--- a/src/main/java/org/distorted/examples/vertex3d/Vertex3DRenderer.java
+++ b/src/main/java/org/distorted/examples/vertex3d/Vertex3DRenderer.java
@@ -49,7 +49,7 @@ class Vertex3DRenderer implements GLSurfaceView.Renderer
     private DistortedBitmap mBackground;
     private DistortedBitmap mCenter;
     private DistortedBitmap mRegion;
-    private int mObjWidth, mObjHeight;
+    private int mObjWidth, mObjHeight, mObjDepth;
     private DynamicQuat mQuatInt1, mQuatInt2;
 
     private Dynamic3D mCenterInter, mRegionInter;
@@ -75,6 +75,7 @@ class Vertex3DRenderer implements GLSurfaceView.Renderer
 
       mObjWidth = mObject.getWidth();
       mObjHeight= mObject.getHeight();
+      mObjDepth = mObject.getDepth();
 
       mQuat1 = new Static4D(0,0,0,1);  // unity
       mQuat2 = new Static4D(0,0,0,1);  // quaternions
@@ -176,7 +177,7 @@ class Vertex3DRenderer implements GLSurfaceView.Renderer
       mCenter.quaternion(mQuatInt2, rotateCen);
 
       mCenter.move( new Static3D( (width -factorCen*centerSize-mFactorObj*mObjWidth )/2 ,
-                                  (height-factorCen*centerSize-mFactorObj*mObjHeight)/2 , 10) );
+                                  (height-factorCen*centerSize-mFactorObj*mObjHeight)/2 , mFactorObj*mObjDepth/2+10) );
       mCenter.move(mCenterInter);
       mCenter.scale(factorCen);
 
@@ -184,7 +185,7 @@ class Vertex3DRenderer implements GLSurfaceView.Renderer
       mRegion.quaternion(mQuatInt2, rotateCen);
 
       mRegion.move( new Static3D( (width -mFactorObj*mObjWidth )/2 ,
-                                  (height-mFactorObj*mObjHeight)/2 , 12) );
+                                  (height-mFactorObj*mObjHeight)/2 , mFactorObj*mObjDepth/2+12) );
       mRegion.move(mCenterInter);
       mRegion.move(mRegionInter);
       mRegion.scale(mRegionScaleInter);
