commit 5601cfa6acbc5f8a6f6921f6246d83e08019a84d
Author: Leszek Koltunski <leszek@koltunski.pl>
Date:   Sat May 9 01:23:24 2020 +0100

    Convert the last app, EffectQueue, to stretchless API.

diff --git a/src/main/java/org/distorted/examples/effectqueue/EffectQueueActivity.java b/src/main/java/org/distorted/examples/effectqueue/EffectQueueActivity.java
index ee9af0e..0ec8750 100644
--- a/src/main/java/org/distorted/examples/effectqueue/EffectQueueActivity.java
+++ b/src/main/java/org/distorted/examples/effectqueue/EffectQueueActivity.java
@@ -22,6 +22,7 @@ package org.distorted.examples.effectqueue;
 import org.distorted.library.effect.Effect;
 import org.distorted.library.effect.EffectName;
 import org.distorted.library.effect.EffectType;
+import org.distorted.library.main.DistortedEffects;
 import org.distorted.library.main.DistortedLibrary;
 import org.distorted.examples.R;
 
@@ -38,7 +39,6 @@ import android.widget.TextView;
 import android.widget.Toast;
 
 import java.util.ArrayList;
-import java.util.HashMap;
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
@@ -50,7 +50,7 @@ public class EffectQueueActivity extends Activity implements AdapterView.OnItemS
   private int mPosID, mPosName, mPosType;
   private TableLayout mLayoutList;
 
-  private class EffectRow
+  private static class EffectRow
     {
     Effect effect;
     TableRow row;
@@ -267,7 +267,9 @@ public class EffectQueueActivity extends Activity implements AdapterView.OnItemS
       }
 
     EffectQueueSurfaceView v = findViewById(R.id.effects2dSurfaceView);
-    v.getRenderer().getEffects().abortByType(type);
+
+    DistortedEffects effects = v.getRenderer().getEffects();
+    effects.abortByType(type);
     }
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
diff --git a/src/main/java/org/distorted/examples/effectqueue/EffectQueueRenderer.java b/src/main/java/org/distorted/examples/effectqueue/EffectQueueRenderer.java
index 0796a75..63b60c0 100644
--- a/src/main/java/org/distorted/examples/effectqueue/EffectQueueRenderer.java
+++ b/src/main/java/org/distorted/examples/effectqueue/EffectQueueRenderer.java
@@ -45,7 +45,7 @@ import org.distorted.library.type.Static3D;
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
 class EffectQueueRenderer implements GLSurfaceView.Renderer, EffectListener
-  {  
+  {
   private static final int NUMLINES =  10;
   private static final int MESH_QUALITY = 100;
   static final int BWID = 600;
@@ -78,7 +78,6 @@ class EffectQueueRenderer implements GLSurfaceView.Renderer, EffectListener
     MatrixEffectScale scaleEffect = new MatrixEffectScale(mScale);
 
     mMesh = new MeshRectangles(MESH_QUALITY,MESH_QUALITY*texHeight/texWidth);
-    mMesh.setStretch(texWidth,texHeight,0);
 
     mTexture = new DistortedTexture();
     mEffects = new DistortedEffects();
@@ -135,7 +134,12 @@ class EffectQueueRenderer implements GLSurfaceView.Renderer, EffectListener
 
   public void onSurfaceChanged(GL10 glUnused, int width, int height)
     {
-    mScale.set((float)width/texWidth,(float)height/texHeight,1);
+    // (w+h)/2 because we need to stretch more or less uniformly in all 3 directions.
+    // If we set it to 0, Distort would not be shaded. If we set it to 1, the Distorted normal
+    // vectors would get stretched only in X and Y dirs, becoming very 'flat' and the Distorted
+    // area very dark.
+    mScale.set(width, height, (width+height)*0.5f);
+
     mScreen.resize(width,height);
     mView.setScreenSize(width,height);
     }
diff --git a/src/main/java/org/distorted/examples/effectqueue/EffectQueueSurfaceView.java b/src/main/java/org/distorted/examples/effectqueue/EffectQueueSurfaceView.java
index 40e8f3e..8954430 100644
--- a/src/main/java/org/distorted/examples/effectqueue/EffectQueueSurfaceView.java
+++ b/src/main/java/org/distorted/examples/effectqueue/EffectQueueSurfaceView.java
@@ -44,7 +44,7 @@ import static org.distorted.examples.effectqueue.EffectQueueRenderer.*;
 
 public class EffectQueueSurfaceView extends GLSurfaceView
   {
-  private static final int RADIUS = EffectQueueRenderer.BWID/6;
+  private static final float RADIUS = 0.15f;
 
   private EffectQueueRenderer mRenderer;
   private int mCurrentEffect;
@@ -65,8 +65,8 @@ public class EffectQueueSurfaceView extends GLSurfaceView
       
     int duration = 10000;
     float count  = 1.0f;
-    int h = 30;
-    int r = 20;
+    float h = 50.0f/BWID;
+    float r = 20.0f/BWID;
 
     mInterD = new Dynamic3D(duration,count);
 
@@ -131,42 +131,41 @@ public class EffectQueueSurfaceView extends GLSurfaceView
   @Override
   public boolean onTouchEvent(MotionEvent event)
     {
-    int x,y,action = event.getAction();
+    int action = event.getAction();
     Effect effect;
     boolean success;
+    float x,y;
 
-    switch(action)
+    if(action==MotionEvent.ACTION_DOWN)
       {
-      case MotionEvent.ACTION_DOWN: x = (int)event.getX()*BWID/mScrW - BWID/2;
-                                    y = BHEI/2 - (int)event.getY()*BHEI/mScrH;
-                                    EffectQueueActivity act = (EffectQueueActivity)getContext();
-                                    Static3D center = new Static3D(x,y,0);
-
-                                    switch(mCurrentEffect)
-                                      {
-                                      case 0: effect = new VertexEffectDistort     (mInterD,      center, REGION_V);
-                                              success= mRenderer.getEffects().apply(effect);
-                                              act.effectAdded(success,effect);
-                                              break;
-                                      case 1: effect = new VertexEffectSink        (mInterS,      center, REGION_V);
-                                              success= mRenderer.getEffects().apply(effect);
-                                              act.effectAdded(success,effect);
-                                              break;
-                                      case 2: effect = new FragmentEffectAlpha     (mInterA,      center, REGION_F, true);
-                                              success= mRenderer.getEffects().apply(effect);
-                                              act.effectAdded(success,effect);
-                                              break;
-                                      case 3: effect = new FragmentEffectSaturation(mInterB,      center, REGION_F, false);
-                                              success= mRenderer.getEffects().apply(effect);
-                                              act.effectAdded(success,effect);
-                                              break;
-                                      case 4: effect = new FragmentEffectChroma    (mInterC, RED, center, REGION_F, true);
-                                              success= mRenderer.getEffects().apply(effect);
-                                              act.effectAdded(success,effect);
-                                              break;
-                                      }
-
-                                    break;
+      x = event.getX()/mScrW - 0.5f;
+      y = 0.5f - event.getY()/mScrH;
+      EffectQueueActivity act = (EffectQueueActivity)getContext();
+      Static3D center = new Static3D(x,y,0);
+
+      switch(mCurrentEffect)
+        {
+        case 0: effect = new VertexEffectDistort     (mInterD,      center, REGION_V);
+                success= mRenderer.getEffects().apply(effect);
+                act.effectAdded(success,effect);
+                break;
+        case 1: effect = new VertexEffectSink        (mInterS,      center, REGION_V);
+                success= mRenderer.getEffects().apply(effect);
+                act.effectAdded(success,effect);
+                break;
+        case 2: effect = new FragmentEffectAlpha     (mInterA,      center, REGION_F, true);
+                success= mRenderer.getEffects().apply(effect);
+                act.effectAdded(success,effect);
+                break;
+        case 3: effect = new FragmentEffectSaturation(mInterB,      center, REGION_F, false);
+                success= mRenderer.getEffects().apply(effect);
+                act.effectAdded(success,effect);
+                break;
+        case 4: effect = new FragmentEffectChroma    (mInterC, RED, center, REGION_F, true);
+                success= mRenderer.getEffects().apply(effect);
+                act.effectAdded(success,effect);
+                break;
+        }
       }
 
     return true;
