commit 56e4be071917b5c80b138b9176be2a03a4b6c5c0
Author: Leszek Koltunski <leszek@distoretedandroid.org>
Date:   Wed Jul 6 13:35:55 2016 +0100

    Improve Fragment3D app some more!

diff --git a/src/main/java/org/distorted/examples/fragment3d/Fragment3DActivity.java b/src/main/java/org/distorted/examples/fragment3d/Fragment3DActivity.java
index b906d2f..f3bbbfe 100644
--- a/src/main/java/org/distorted/examples/fragment3d/Fragment3DActivity.java
+++ b/src/main/java/org/distorted/examples/fragment3d/Fragment3DActivity.java
@@ -310,7 +310,7 @@ public class Fragment3DActivity extends Activity
 
     View view = chroma.createView(this);
     LinearLayout layout = (LinearLayout)findViewById(R.id.fragment3dlayout);
-    layout.addView(view,0);
+    layout.addView(view);
 
     Dynamic1D dyn1 = chroma.getDyn1();
     Dynamic3D dyn3 = chroma.getDyn3();
@@ -327,7 +327,7 @@ public class Fragment3DActivity extends Activity
 
     View view = alpha.createView(this);
     LinearLayout layout = (LinearLayout)findViewById(R.id.fragment3dlayout);
-    layout.addView(view,0);
+    layout.addView(view);
 
     Dynamic1D dyn1 = alpha.getDyn1();
 
@@ -343,7 +343,7 @@ public class Fragment3DActivity extends Activity
 
     View view = brightness.createView(this);
     LinearLayout layout = (LinearLayout)findViewById(R.id.fragment3dlayout);
-    layout.addView(view,0);
+    layout.addView(view);
 
     Dynamic1D dyn1 = brightness.getDyn1();
 
@@ -359,7 +359,7 @@ public class Fragment3DActivity extends Activity
 
     View view = saturation.createView(this);
     LinearLayout layout = (LinearLayout)findViewById(R.id.fragment3dlayout);
-    layout.addView(view,0);
+    layout.addView(view);
 
     Dynamic1D dyn1 = saturation.getDyn1();
 
diff --git a/src/main/java/org/distorted/examples/fragment3d/Fragment3DRenderer.java b/src/main/java/org/distorted/examples/fragment3d/Fragment3DRenderer.java
index e36be39..82db5f0 100644
--- a/src/main/java/org/distorted/examples/fragment3d/Fragment3DRenderer.java
+++ b/src/main/java/org/distorted/examples/fragment3d/Fragment3DRenderer.java
@@ -55,6 +55,7 @@ class Fragment3DRenderer implements GLSurfaceView.Renderer
     private GLSurfaceView mView;
     private DistortedObject mObject;
     private DistortedBitmap mCenter;
+    private DistortedBitmap mBackground;
     private float mFactorCen, mFactorObj;
 
     private int mObjWidth, mObjHeight;
@@ -83,8 +84,9 @@ class Fragment3DRenderer implements GLSurfaceView.Renderer
       {
       mView = v;
 
-      mObject = ((Fragment3DActivity)v.getContext()).getObject();
-      mCenter = new DistortedBitmap(SIZE, SIZE, 1);
+      mObject     = ((Fragment3DActivity)v.getContext()).getObject();
+      mCenter     = new DistortedBitmap(SIZE, SIZE, 1);
+      mBackground = new DistortedBitmap(SIZE, SIZE, 1);
 
       mObjWidth = mObject.getWidth();
       mObjHeight= mObject.getHeight();
@@ -112,6 +114,7 @@ class Fragment3DRenderer implements GLSurfaceView.Renderer
 
       long time = System.currentTimeMillis();
 
+      mBackground.draw(time);
       mObject.draw(time);
       mCenter.draw(time);
       }
@@ -124,6 +127,7 @@ class Fragment3DRenderer implements GLSurfaceView.Renderer
 
       mObject.abortEffects(EffectTypes.MATRIX);
       mCenter.abortEffects(EffectTypes.MATRIX);
+      mBackground.abortEffects(EffectTypes.MATRIX);
 
       int centerSize = mCenter.getWidth();
 
@@ -163,6 +167,13 @@ class Fragment3DRenderer implements GLSurfaceView.Renderer
       mCenter.move(mMoveInter);
       mCenter.scale(mFactorCen);
 
+      int backgroundSize = mBackground.getWidth();
+      float factorBackX = ((float)width)/backgroundSize;
+      float factorBackY = ((float)height)/backgroundSize;
+
+      mBackground.move(new Static3D( -width/2, -height/2,-mFactorObj*(mObjWidth+mObjHeight)/2) );
+      mBackground.scale(new Static3D(2*factorBackX, 2*factorBackY, 1.0f) );
+
       Distorted.onSurfaceChanged(width, height); 
       }
 
@@ -174,13 +185,15 @@ class Fragment3DRenderer implements GLSurfaceView.Renderer
 
       InputStream is1 = act.getResources().openRawResource(act.getBitmap());
       InputStream is2 = act.getResources().openRawResource(R.raw.center);
+      InputStream is3 = act.getResources().openRawResource(R.raw.water);
 
-      Bitmap bitmap1,bitmap2;
+      Bitmap bitmap1,bitmap2,bitmap3;
         
       try 
         {
         bitmap1 = BitmapFactory.decodeStream(is1);
         bitmap2 = BitmapFactory.decodeStream(is2);
+        bitmap3 = BitmapFactory.decodeStream(is3);
         }
       finally 
         {
@@ -188,13 +201,15 @@ class Fragment3DRenderer implements GLSurfaceView.Renderer
           {
           is1.close();
           is2.close();
+          is3.close();
           } 
         catch(IOException e) { }
         }  
       
       mObject.setBitmap(bitmap1);
       mCenter.setBitmap(bitmap2);
-
+      mBackground.setBitmap(bitmap3)
+      ;
       try
         {
         Distorted.onSurfaceCreated(mView.getContext());
