commit 3bec5dc2d6ac286f778869b133bc5a9391c9840c
Author: Leszek Koltunski <leszek@distorted.org>
Date:   Thu Jul 7 00:41:37 2016 +0100

    Fragment3D finished.

diff --git a/src/main/java/org/distorted/examples/fragment3d/Fragment3DActivity.java b/src/main/java/org/distorted/examples/fragment3d/Fragment3DActivity.java
index 4bd85df..669789f 100644
--- a/src/main/java/org/distorted/examples/fragment3d/Fragment3DActivity.java
+++ b/src/main/java/org/distorted/examples/fragment3d/Fragment3DActivity.java
@@ -292,7 +292,17 @@ public class Fragment3DActivity extends Activity
 
     setContentView(view);
 
-    String[] effects = new String[] {"CHROMA", "ALPHA", "BRIGHTNESS", "SATURATION"};
+    String[] effects = new String[] { "MACROBLOCK",
+                                      "ALPHA",
+                                      "SMOOTH_ALPHA",
+                                      "CHROMA",
+                                      "SMOOTH_CHROMA",
+                                      "BRIGHTNESS",
+                                      "SMOOTH_BRIGHTNESS",
+                                      "SATURATION",
+                                      "SMOOTH_SATURATION",
+                                      "CONTRAST",
+                                      "SMOOTH_CONTRAST" };
 
     Spinner effectSpinner = (Spinner)findViewById(R.id.fragment3dspinner );
     effectSpinner.setOnItemSelectedListener(this);
@@ -312,10 +322,17 @@ public class Fragment3DActivity extends Activity
 
     switch(mEffectAdd)
       {
-      case 0 : name = EffectNames.CHROMA    ; break;
-      case 1 : name = EffectNames.ALPHA     ; break;
-      case 2 : name = EffectNames.BRIGHTNESS; break;
-      case 3 : name = EffectNames.SATURATION; break;
+      case 0 : name = EffectNames.MACROBLOCK       ; break;
+      case 1 : name = EffectNames.ALPHA            ; break;
+      case 2 : name = EffectNames.SMOOTH_ALPHA     ; break;
+      case 3 : name = EffectNames.CHROMA           ; break;
+      case 4 : name = EffectNames.SMOOTH_CHROMA    ; break;
+      case 5 : name = EffectNames.BRIGHTNESS       ; break;
+      case 6 : name = EffectNames.SMOOTH_BRIGHTNESS; break;
+      case 7 : name = EffectNames.SATURATION       ; break;
+      case 8 : name = EffectNames.SMOOTH_SATURATION; break;
+      case 9 : name = EffectNames.CONTRAST         ; break;
+      case 10: name = EffectNames.SMOOTH_CONTRAST  ; break;
       default: return;
       }
 
@@ -334,10 +351,18 @@ public class Fragment3DActivity extends Activity
 
     switch(mEffectAdd)
       {
-      case 0: mObject.chroma    (dyn1, dyn3, regi, false); break;
+      case 0: mObject.macroblock(dyn1,       regi       ); break;
       case 1: mObject.alpha     (dyn1,       regi, false); break;
-      case 2: mObject.brightness(dyn1,       regi, false); break;
-      case 3: mObject.saturation(dyn1,       regi, false); break;
+      case 2: mObject.alpha     (dyn1,       regi, true ); break;
+      case 3: mObject.chroma    (dyn1, dyn3, regi, false); break;
+      case 4: mObject.chroma    (dyn1, dyn3, regi, true ); break;
+      case 5: mObject.brightness(dyn1,       regi, false); break;
+      case 6: mObject.brightness(dyn1,       regi, true ); break;
+      case 7: mObject.saturation(dyn1,       regi, false); break;
+      case 8: mObject.saturation(dyn1,       regi, true ); break;
+      case 9: mObject.contrast  (dyn1,       regi, false); break;
+      case 10:mObject.contrast  (dyn1,       regi, true ); break;
+
       }
     }
 
diff --git a/src/main/java/org/distorted/examples/fragment3d/Fragment3DEffect.java b/src/main/java/org/distorted/examples/fragment3d/Fragment3DEffect.java
index 4abb065..8807a62 100644
--- a/src/main/java/org/distorted/examples/fragment3d/Fragment3DEffect.java
+++ b/src/main/java/org/distorted/examples/fragment3d/Fragment3DEffect.java
@@ -87,10 +87,10 @@ public class Fragment3DEffect implements SeekBar.OnSeekBarChangeListener
 
   private void setRegionText()
     {
-    float f0 = ((int)(mRegionSta.getX()*100))/100.0f;
-    float f1 = ((int)(mRegionSta.getY()*100))/100.0f;
-    float f2 = ((int)(mRegionSta.getZ()*100))/100.0f;
-    float f3 = ((int)(mRegionSta.getW()*100))/100.0f;
+    int f0 = (int)mRegionSta.getX();
+    int f1 = (int)mRegionSta.getY();
+    int f2 = (int)mRegionSta.getZ();
+    int f3 = (int)mRegionSta.getW();
 
     mTextRegion.setText("region ("+f0+","+f1+","+f2+","+f3+")");
     }
@@ -101,17 +101,25 @@ public class Fragment3DEffect implements SeekBar.OnSeekBarChangeListener
     {
     switch(mName)
       {
-      case CHROMA    : mSta1.set(mInter[0]/100.0f);
-                       mSta3.set(255.0f*mInter[1]/100,
-                                 255.0f*mInter[2]/100,
-                                 255.0f*mInter[3]/100);
-                       break;
-      case ALPHA     : mSta1.set(mInter[0]/100.0f);
-                       break;
-      case BRIGHTNESS: mSta1.set(mInter[0]/100.0f);
-                       break;
-      case SATURATION: mSta1.set(mInter[0]/100.0f);
-                       break;
+      case MACROBLOCK       : Fragment3DActivity act = mAct.get();
+                              mSta1.set(mInter[0]*act.getWidth() / 100.0f);
+                              break;
+      case ALPHA            :
+      case SMOOTH_ALPHA     :
+      case BRIGHTNESS       :
+      case SMOOTH_BRIGHTNESS:
+      case SATURATION       :
+      case SMOOTH_SATURATION:
+      case CONTRAST         :
+      case SMOOTH_CONTRAST  : mSta1.set(mInter[0]/100.0f);
+                              break;
+
+      case CHROMA           :
+      case SMOOTH_CHROMA    : mSta1.set(mInter[0]/100.0f);
+                              mSta3.set(255.0f*mInter[1]/100,
+                                        255.0f*mInter[2]/100,
+                                        255.0f*mInter[3]/100);
+                              break;
       }
     }
 
@@ -121,17 +129,24 @@ public class Fragment3DEffect implements SeekBar.OnSeekBarChangeListener
     {
     switch(mName)
       {
-      case CHROMA    : mInter[0] =   0;
-                       mInter[1] =   0;
-                       mInter[2] =   0;
-                       mInter[3] =   0;
-                       break;
-      case ALPHA     : mInter[0] = 100;
-                       break;
-      case BRIGHTNESS: mInter[0] = 100;
-                       break;
-      case SATURATION: mInter[0] = 100;
-                       break;
+      case MACROBLOCK       : mInter[0] =  3;
+                              break;
+      case ALPHA            :
+      case SMOOTH_ALPHA     :
+      case BRIGHTNESS       :
+      case SMOOTH_BRIGHTNESS:
+      case SATURATION       :
+      case SMOOTH_SATURATION:
+      case CONTRAST         :
+      case SMOOTH_CONTRAST  : mInter[0] = 50;
+                              break;
+
+      case CHROMA           :
+      case SMOOTH_CHROMA    : mInter[0] = 50;
+                              mInter[1] =  0;
+                              mInter[2] =  0;
+                              mInter[3] =  0;
+                              break;
       }
     }
 
@@ -139,22 +154,19 @@ public class Fragment3DEffect implements SeekBar.OnSeekBarChangeListener
 
   private void setText()
     {
-    float f1 = ((int)mSta1.getX()*100)/100.0f;
+    float f1 = ((int)(mSta1.getX()*100))/100.0f;
 
-    switch(mName)
+    String text = mName.name() +" "+f1;
+
+    if( mName==EffectNames.CHROMA || mName==EffectNames.SMOOTH_CHROMA)
       {
-      case CHROMA    : float f2 = ((int)mSta3.getX()*100)/100.0f;
-                       float f3 = ((int)mSta3.getY()*100)/100.0f;
-                       float f4 = ((int)mSta3.getZ()*100)/100.0f;
-                       mText.setText("chroma "+f1+"("+f2+","+f3+","+f4+")");
-                       break;
-      case ALPHA     : mText.setText("alpha ("+f1+")");
-                       break;
-      case BRIGHTNESS: mText.setText("brightness ("+f1+")");
-                       break;
-      case SATURATION: mText.setText("saturation ("+f1+")");
-                       break;
+      int f2 = (int)mSta3.getX();
+      int f3 = (int)mSta3.getY();
+      int f4 = (int)mSta3.getZ();
+      text += "("+f2+","+f3+","+f4+")";
       }
+
+    mText.setText(text);
     }
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
@@ -164,7 +176,7 @@ public class Fragment3DEffect implements SeekBar.OnSeekBarChangeListener
     mAct = new WeakReference<>(act);
     mName = name;
 
-    if( mName==EffectNames.CHROMA )
+    if( mName==EffectNames.CHROMA || mName==EffectNames.SMOOTH_CHROMA )
       {
       mDimension = 4;
       mDyn3 = new Dynamic3D();
diff --git a/src/main/res/drawable-hdpi/icon_example_fragment3d.png b/src/main/res/drawable-hdpi/icon_example_fragment3d.png
index a378eea..0f27e84 100644
Binary files a/src/main/res/drawable-hdpi/icon_example_fragment3d.png and b/src/main/res/drawable-hdpi/icon_example_fragment3d.png differ
diff --git a/src/main/res/values/strings.xml b/src/main/res/values/strings.xml
index ba7b4f9..46f78af 100644
--- a/src/main/res/values/strings.xml
+++ b/src/main/res/values/strings.xml
@@ -93,11 +93,11 @@
     <string name="example_cubes_subtitle">Tests the DistortedCubes render target.</string>
     <string name="example_quaternion">Quaternion</string>  
     <string name="example_quaternion_subtitle">Random rotations using quaternions.</string>
-    <string name="example_matrix3d">3D Matrix Effects</string>
+    <string name="example_matrix3d">Matrix Effects</string>
     <string name="example_matrix3d_subtitle">Test results of Matrix effects on a 3D object.</string>
-    <string name="example_vertex3d">3D Vertex Effects</string>
+    <string name="example_vertex3d">Vertex Effects</string>
     <string name="example_vertex3d_subtitle">Test results of Vertex effects on a 3D object.</string>
-    <string name="example_fragment3d">3D Fragment Effects</string>
+    <string name="example_fragment3d">Fragment Effects</string>
     <string name="example_fragment3d_subtitle">Test results of Fragment effects on a 3D object.</string>
     <string name="example_plainmonalisa">PlainMonaLisa</string>
     <string name="example_plainmonalisa_subtitle">MonaLisa rendered on a plain SurfaceView</string>
