commit 26c4e181705371a7f4a83f38cc506f33b6e9d001
Author: Leszek Koltunski <leszek@koltunski.pl>
Date:   Sat Feb 29 22:11:19 2020 +0000

    First fixes for moving the Vertex and Fragment centers of effect to the center of the Mesh.

diff --git a/src/main/java/org/distorted/examples/bean/BeanRenderer.java b/src/main/java/org/distorted/examples/bean/BeanRenderer.java
index 1f39aeb..8127671 100644
--- a/src/main/java/org/distorted/examples/bean/BeanRenderer.java
+++ b/src/main/java/org/distorted/examples/bean/BeanRenderer.java
@@ -51,7 +51,7 @@ class BeanRenderer implements GLSurfaceView.Renderer
    private DistortedScreen mScreen;
    private DistortedTexture mTexture;
    private MeshRectangles mMesh;
-   private Static3D mScale;
+   private Static3D mScale, mBrowL, mBrowR;
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
@@ -59,8 +59,7 @@ class BeanRenderer implements GLSurfaceView.Renderer
       {
       mView = v;
      
-      Static3D pointLeft  = new Static3D( 98, 297, 0);
-      Static3D pointRight = new Static3D(233, 340, 0);
+
       Static4D regionLeft = new Static4D( -3, 33, 0, 47);
       Static4D regionRight= new Static4D(-14, 33, 0, 47);
       Dynamic3D dynLeft   = new Dynamic3D(2000,0.0f);
@@ -84,10 +83,12 @@ class BeanRenderer implements GLSurfaceView.Renderer
       dynRight.add(vect1);
 
       mScale= new Static3D(1,1,1);
+      mBrowL= new Static3D(0,0,0);
+      mBrowR= new Static3D(0,0,0);
 
       mEffects = new DistortedEffects();
-      mEffects.apply( new VertexEffectDistort(dynLeft , pointLeft , regionLeft) );
-      mEffects.apply( new VertexEffectDistort(dynRight, pointRight, regionRight));
+      mEffects.apply( new VertexEffectDistort(dynLeft , mBrowL, regionLeft) );
+      mEffects.apply( new VertexEffectDistort(dynRight, mBrowR, regionRight));
       mEffects.apply( new MatrixEffectScale(mScale) );
 
       mScreen = new DistortedScreen();
@@ -135,8 +136,12 @@ class BeanRenderer implements GLSurfaceView.Renderer
      int bmpHeight = bitmap.getHeight();
      int bmpWidth  = bitmap.getWidth();
 
+     mBrowL.set( 98 - bmpWidth/2, 297 - bmpHeight/2, 0);
+     mBrowR.set(233 - bmpWidth/2, 340 - bmpHeight/2, 0);
+
      if( mTexture==null ) mTexture = new DistortedTexture();
      mTexture.setTexture(bitmap);
+
      if( mMesh==null )
        {
        mMesh = new MeshRectangles(25,25*bmpHeight/bmpWidth);
diff --git a/src/main/java/org/distorted/examples/monalisa/MonaLisaRenderer.java b/src/main/java/org/distorted/examples/monalisa/MonaLisaRenderer.java
index 1724596..29d5dbe 100644
--- a/src/main/java/org/distorted/examples/monalisa/MonaLisaRenderer.java
+++ b/src/main/java/org/distorted/examples/monalisa/MonaLisaRenderer.java
@@ -51,6 +51,7 @@ class MonaLisaRenderer implements GLSurfaceView.Renderer
     private MeshRectangles mMesh;
     private DistortedScreen mScreen;
     private Static3D mScale;
+    private Static3D mCenterLeft, mCenterRight;
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
@@ -60,8 +61,9 @@ class MonaLisaRenderer implements GLSurfaceView.Renderer
 
       // two points, centers of the Distort effect
       // the left and right tip of the mouth
-      Static3D pLeft  = new Static3D( 90, 108, 0);
-      Static3D pRight = new Static3D(176, 111, 0);
+      // (0,0,0) for now because we don't know the size of the bitmap yet.
+      mCenterLeft  = new Static3D(0,0,0);
+      mCenterRight = new Static3D(0,0,0);
 
       // two regions defining the areas affected by the Distort effect
       Static4D rLeft  = new Static4D(-10, 10, 0, 25);
@@ -83,8 +85,8 @@ class MonaLisaRenderer implements GLSurfaceView.Renderer
       dRight.add( new Static3D( 20, 10, 0) );
 
       mEffects = new DistortedEffects();
-      mEffects.apply( new VertexEffectDistort(dLeft , pLeft , rLeft ) );
-      mEffects.apply( new VertexEffectDistort(dRight, pRight, rRight) );
+      mEffects.apply( new VertexEffectDistort(dLeft , mCenterLeft , rLeft ) );
+      mEffects.apply( new VertexEffectDistort(dRight, mCenterRight, rRight) );
 
       mScale= new Static3D(1,1,1);
       mEffects.apply(new MatrixEffectScale(mScale));
@@ -103,8 +105,8 @@ class MonaLisaRenderer implements GLSurfaceView.Renderer
     
     public void onSurfaceChanged(GL10 glUnused, int width, int height) 
       {
-      float horiRatio = (float)width / mTexture.getWidth();
-      float vertRatio = (float)height/ mTexture.getHeight();
+      float horiRatio = (float)width / mMesh.getStretchX();
+      float vertRatio = (float)height/ mMesh.getStretchY();
       float factor    = horiRatio > vertRatio ? vertRatio : horiRatio;
 
       mScale.set( factor,factor,factor );
@@ -134,6 +136,11 @@ class MonaLisaRenderer implements GLSurfaceView.Renderer
       int bmpHeight = bitmap.getHeight();
       int bmpWidth  = bitmap.getWidth();
 
+      // Now we know the size of the bitmap, we can set the centers of effects
+      // to (90,108) from the lower-left corner (CenterLeft) and (176,111) from the corner.
+      mCenterLeft .set( 90 - bmpWidth/2, 108 - bmpHeight/2, 0);
+      mCenterRight.set(176 - bmpWidth/2, 111 - bmpHeight/2, 0);
+
       // We could have gotten here after the activity went to the background
       // for a brief amount of time; in this case mTexture is already created.
       // Do not leak memory by creating it the second time around.
diff --git a/src/main/java/org/distorted/examples/projection/ProjectionRenderer.java b/src/main/java/org/distorted/examples/projection/ProjectionRenderer.java
index 8eed135..c063853 100644
--- a/src/main/java/org/distorted/examples/projection/ProjectionRenderer.java
+++ b/src/main/java/org/distorted/examples/projection/ProjectionRenderer.java
@@ -126,9 +126,9 @@ class ProjectionRenderer implements GLSurfaceView.Renderer
       mRegion.set(0,0,0,min/4);
 
       mPoint1.set(  width/4,   height/4, 0);
-      mPoint2.set(3*width/4,   height/4, 0);
-      mPoint3.set(  width/4, 3*height/4, 0);
-      mPoint4.set(3*width/4, 3*height/4, 0);
+      mPoint2.set( -width/4,   height/4, 0);
+      mPoint3.set(  width/4,  -height/4, 0);
+      mPoint4.set( -width/4,  -height/4, 0);
 
       // Avoid memory leaks: delete old texture if it exists (it might if we
       // got here after a brief amount of time spent in the background)
diff --git a/src/main/java/org/distorted/examples/sink/SinkRenderer.java b/src/main/java/org/distorted/examples/sink/SinkRenderer.java
index 8643ddd..7faa9e4 100644
--- a/src/main/java/org/distorted/examples/sink/SinkRenderer.java
+++ b/src/main/java/org/distorted/examples/sink/SinkRenderer.java
@@ -64,7 +64,7 @@ class SinkRenderer implements GLSurfaceView.Renderer
     sink.add(new Static1D(0.2f));
 
     mEffects = new DistortedEffects();
-    VertexEffectSink sinkEffect = new VertexEffectSink(sink, new Static3D(297, 280, 0), null);
+    VertexEffectSink sinkEffect = new VertexEffectSink(sink, new Static3D(0,0,0), null);
     mEffects.apply(sinkEffect);
 
     mScale = new Static3D(1,1,1);
@@ -117,13 +117,13 @@ class SinkRenderer implements GLSurfaceView.Renderer
 
     if( mTexture==null ) mTexture = new DistortedTexture();
     mTexture.setTexture(bitmap);
+
     if( mMesh==null )
       {
       mMesh = new MeshRectangles(30,30*bmpHeight/bmpWidth);
       mMesh.setStretch(bmpWidth,bmpHeight,0);
       }
 
-
     mScreen.detachAll();
     mScreen.attach(mTexture,mEffects,mMesh);
 
