commit b88ec561c1556df58e39019d122132437967b66d
Author: Leszek Koltunski <leszek@koltunski.pl>
Date:   Thu Jan 3 00:49:44 2019 +0000

    Progress with the Earth app.

diff --git a/src/main/java/org/distorted/examples/earth/EarthRenderer.java b/src/main/java/org/distorted/examples/earth/EarthRenderer.java
index 066d511..5e4a1de 100644
--- a/src/main/java/org/distorted/examples/earth/EarthRenderer.java
+++ b/src/main/java/org/distorted/examples/earth/EarthRenderer.java
@@ -62,10 +62,13 @@ import javax.microedition.khronos.opengles.GL10;
 
 class EarthRenderer implements GLSurfaceView.Renderer
 {
-    private static final int   SIZE =   500;
-    private static final int   LEVEL=    32;
-    private static final float FOV  = 30.0f;
-    private static final float NEAR =  0.1f;
+    private static final float D      = (float)Math.sqrt(2.0)/2.0f;
+
+    private static final int   SIZE   =   500;
+    private static final int   RADIUS =   (int)(SIZE*D);
+    private static final int   LEVEL  =    32;
+    private static final float FOV    = 30.0f;
+    private static final float NEAR   =  0.1f;
 
     private GLSurfaceView mView;
     private DistortedTexture mTexture;
@@ -79,6 +82,7 @@ class EarthRenderer implements GLSurfaceView.Renderer
     int mScreenMin;
 
     private Static3D mColor;
+    private Static3D mRegionF;
     private Static1D mStrength;
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
@@ -88,13 +92,14 @@ class EarthRenderer implements GLSurfaceView.Renderer
       mView = v;
 
       mStrength = new Static1D(0.5f);
-      mColor= new Static3D(255,0,0);
-      mMove = new Static3D(0,0,0);
-      mScale= new Static3D(1,1,1);
-      mCenter=new Static3D(0,0,0);
+      mColor    = new Static3D(255,0,0);
+      mRegionF  = new Static3D(RADIUS,RADIUS,RADIUS);
+      mMove     = new Static3D(0,0,0);
+      mScale    = new Static3D(1,1,1);
+      mCenter   = new Static3D(0,0,0);
 
-      mMesh   = new MeshSphere(LEVEL);
-      mTexture= new DistortedTexture(SIZE,SIZE);
+      mMesh     = new MeshSphere(LEVEL);
+      mTexture  = new DistortedTexture(SIZE,SIZE);
 
       mObjWidth = mTexture.getWidth();
       mObjHeight= mTexture.getHeight();
@@ -115,6 +120,10 @@ class EarthRenderer implements GLSurfaceView.Renderer
       mEffects.apply( new MatrixEffectQuaternion(quatInt1, mCenter) );
       mEffects.apply( new MatrixEffectQuaternion(quatInt2, mCenter) );
 
+
+      Static3D center = new Static3D(0.5f*mObjWidth,0.5f*mObjHeight,0.5f*mObjDepth);
+      mEffects.apply( new FragmentEffectChroma(mStrength, mColor,center, mRegionF, false) );
+
       mScreen = new DistortedScreen();
       mScreen.setProjection(FOV, NEAR);
       }
@@ -163,8 +172,10 @@ class EarthRenderer implements GLSurfaceView.Renderer
       float y = 0.7071f*(float)(cosLON*cosLAT);
       float z = 0.7071f*(float)        sinLAT ;
 
-      float radius = SIZE/10;
-      Static4D region = new Static4D(x*mObjWidth,y*mObjHeight,radius,radius);
+      Static3D center = new Static3D(x*mObjWidth,y*mObjHeight,z*mObjDepth);
+
+      android.util.Log.e("earth", "center "+(x*mObjWidth)+" "+(y*mObjHeight)+" "+(z*mObjDepth));
+      android.util.Log.e("earth", "longitude: "+longitude+" latitude:"+latitude);
 
       switch(name)
         {
@@ -175,23 +186,23 @@ class EarthRenderer implements GLSurfaceView.Renderer
         case PINCH            : effect = new VertexEffectPinch  (mDyn2, center, mRegionV); break;
         case SWIRL            : effect = new VertexEffectSwirl  (mDyn1, center, mRegionV); break;
         case WAVE             : effect = new VertexEffectWave   (mDyn5, center, mRegionV); break;
-
-        case ALPHA            : effect = new FragmentEffectAlpha     (mStrength,        region, false); break;
-        case SMOOTH_ALPHA     : effect = new FragmentEffectAlpha     (mStrength,        region, true ); break;
-        case CHROMA           : effect = new FragmentEffectChroma    (mStrength, mColor,region, false); break;
-        case SMOOTH_CHROMA    : effect = new FragmentEffectChroma    (mStrength, mColor,region, true ); break;
-        case BRIGHTNESS       : effect = new FragmentEffectBrightness(mStrength,        region, false); break;
-        case SMOOTH_BRIGHTNESS: effect = new FragmentEffectBrightness(mStrength,        region, true ); break;
-        case SATURATION       : effect = new FragmentEffectSaturation(mStrength,        region, false); break;
-        case SMOOTH_SATURATION: effect = new FragmentEffectSaturation(mStrength,        region, true ); break;
-        case CONTRAST         : effect = new FragmentEffectContrast  (mStrength,        region, false); break;
-        case SMOOTH_CONTRAST  : effect = new FragmentEffectContrast  (mStrength,        region, true ); break;
         */
+        case ALPHA            : effect = new FragmentEffectAlpha     (mStrength,        center, mRegionF, false); break;
+        case SMOOTH_ALPHA     : effect = new FragmentEffectAlpha     (mStrength,        center, mRegionF, true ); break;
+        case CHROMA           : effect = new FragmentEffectChroma    (mStrength, mColor,center, mRegionF, false); break;
+        case SMOOTH_CHROMA    : effect = new FragmentEffectChroma    (mStrength, mColor,center, mRegionF, true ); break;
+        case BRIGHTNESS       : effect = new FragmentEffectBrightness(mStrength,        center, mRegionF, false); break;
+        case SMOOTH_BRIGHTNESS: effect = new FragmentEffectBrightness(mStrength,        center, mRegionF, true ); break;
+        case SATURATION       : effect = new FragmentEffectSaturation(mStrength,        center, mRegionF, false); break;
+        case SMOOTH_SATURATION: effect = new FragmentEffectSaturation(mStrength,        center, mRegionF, true ); break;
+        case CONTRAST         : effect = new FragmentEffectContrast  (mStrength,        center, mRegionF, false); break;
+        case SMOOTH_CONTRAST  : effect = new FragmentEffectContrast  (mStrength,        center, mRegionF, true ); break;
+
+        default               : android.util.Log.e("EarthRenderer", "unexpected effect: "+name.toString() );
         }
 
       if( effect!=null )
         {
-        android.util.Log.e("renderer", "adding fragment effect");
         mEffects.apply(effect);
         }
       }
@@ -229,6 +240,9 @@ class EarthRenderer implements GLSurfaceView.Renderer
       mScreen.detachAll();
       mScreen.attach(mTexture,mEffects,mMesh);
 
+      Effect.enableEffects(EffectType.FRAGMENT);
+      Effect.enableEffects(EffectType.VERTEX);
+
       try
         {
         Distorted.onCreate(mView.getContext());
diff --git a/src/main/java/org/distorted/examples/effects3d/Effects3DEffect.java b/src/main/java/org/distorted/examples/effects3d/Effects3DEffect.java
index a64c38d..4dfc3fc 100644
--- a/src/main/java/org/distorted/examples/effects3d/Effects3DEffect.java
+++ b/src/main/java/org/distorted/examples/effects3d/Effects3DEffect.java
@@ -99,41 +99,6 @@ class Effects3DEffect implements SeekBar.OnSeekBarChangeListener
   private View mButton, mEffect, mCenter, mRegion;
   private long mId;
 
-///////////////////////////////////////////////////////////////////////////////////////////////////
-// this will enable() all Fragment Effects twice (once for smooth variant, once for non-smooth)
-// but this shouldn't matter.
-
-  static void enableAllEffects()
-    {
-    Method method=null;
-
-    for(EffectName name: EffectName.values())
-      {
-      if( name.getType() != EffectType.MATRIX )  // you don't need to enable Matrix Effects
-        {
-        Class<? extends Effect> cls = name.getEffectClass();
-
-        try
-          {
-          method = cls.getMethod("enable");
-          }
-        catch(NoSuchMethodException ex)
-          {
-          android.util.Log.e("Effects3DEffect", "exception getting method: "+ex.getMessage());
-          }
-
-        try
-          {
-          method.invoke(null);
-          }
-        catch(Exception ex)
-          {
-          android.util.Log.e("Effects3DEffect", "exception invoking method: "+ex.getMessage());
-          }
-        }
-      }
-    }
-
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 // requires knowledge about effect nature
 
diff --git a/src/main/java/org/distorted/examples/effects3d/Effects3DRenderer.java b/src/main/java/org/distorted/examples/effects3d/Effects3DRenderer.java
index e56d992..6596b0b 100644
--- a/src/main/java/org/distorted/examples/effects3d/Effects3DRenderer.java
+++ b/src/main/java/org/distorted/examples/effects3d/Effects3DRenderer.java
@@ -24,6 +24,8 @@ import android.graphics.BitmapFactory;
 import android.opengl.GLSurfaceView;
 
 import org.distorted.examples.R;
+import org.distorted.library.effect.Effect;
+import org.distorted.library.effect.EffectType;
 import org.distorted.library.effect.MatrixEffectMove;
 import org.distorted.library.effect.MatrixEffectQuaternion;
 import org.distorted.library.effect.MatrixEffectScale;
@@ -300,7 +302,9 @@ class Effects3DRenderer implements GLSurfaceView.Renderer
       mCenterTexture.setTexture(bitmapC);
       mRegionTexture.setTexture(bitmapR);
 
-      Effects3DEffect.enableAllEffects();
+      Effect.enableEffects(EffectType.VERTEX);
+      Effect.enableEffects(EffectType.FRAGMENT);
+      Effect.enableEffects(EffectType.POSTPROCESS);
 
       try
         {
