commit f94110ca3782f6483eb05a4ae2a73dbb385f31d0
Author: Leszek Koltunski <leszek@koltunski.pl>
Date:   Fri May 8 01:38:42 2020 +0100

    Convert Mirror to stretchless API.

diff --git a/src/main/java/org/distorted/examples/mirror/MirrorRenderer.java b/src/main/java/org/distorted/examples/mirror/MirrorRenderer.java
index 0c7324c..875de7f 100644
--- a/src/main/java/org/distorted/examples/mirror/MirrorRenderer.java
+++ b/src/main/java/org/distorted/examples/mirror/MirrorRenderer.java
@@ -27,6 +27,7 @@ import org.distorted.examples.R;
 import org.distorted.library.effect.FragmentEffectBrightness;
 import org.distorted.library.effect.MatrixEffectMove;
 import org.distorted.library.effect.MatrixEffectScale;
+import org.distorted.library.effect.VertexEffectScale;
 import org.distorted.library.main.DistortedLibrary;
 import org.distorted.library.main.DistortedEffects;
 import org.distorted.library.main.DistortedFramebuffer;
@@ -62,6 +63,7 @@ class MirrorRenderer implements GLSurfaceView.Renderer
    private DistortedScreen mScreen;
    private MeshQuad mQuad1, mQuad2, mQuadMirror, mQuadHead;
    private Static3D mHeadPosition, mScaleMirror, mMoveOffscreen2, mScaleHead;
+   private Static3D mScaleOffscreen1, mScaleOffscreen2;
 
    private int mX;
    private int mMirrorW, mMirrorH, mHeadW, mHeadH;
@@ -91,11 +93,16 @@ class MirrorRenderer implements GLSurfaceView.Renderer
       mScaleMirror     = new Static3D(1,1,1);
       mMoveOffscreen2  = new Static3D(0,0,0);
       mScaleHead       = new Static3D(1,1,1);
+      mScaleOffscreen1 = new Static3D(1,1,1);
+      mScaleOffscreen2 = new Static3D(1,1,1);
 
-      mEffectsMirror.apply( new MatrixEffectScale(mScaleMirror));
+      mEffectsMirror.apply( new VertexEffectScale(mScaleMirror));
+      mEffectsScreen.apply( new VertexEffectScale(mScaleOffscreen1) );
+      mEffectsOffscreen1.apply( new VertexEffectScale(mScaleOffscreen1) );
       mEffectsOffscreen1.apply( new MatrixEffectScale( new Static3D(MIRROR_SCALE,MIRROR_SCALE,MIRROR_SCALE)));
+      mEffectsOffscreen2.apply( new VertexEffectScale(mScaleOffscreen2) );
       mEffectsOffscreen2.apply( new MatrixEffectMove(mMoveOffscreen2) );
-      mEffectsHead.apply( new MatrixEffectScale(mScaleHead) );
+      mEffectsHead.apply( new VertexEffectScale(mScaleHead) );
       mEffectsHead.apply( new MatrixEffectMove(mHeadPosition) );
       mEffectsOffscreen1.apply(new FragmentEffectBrightness(new Static1D(MIRROR_BRIGHTNESS)));
       }
@@ -149,19 +156,15 @@ class MirrorRenderer implements GLSurfaceView.Renderer
         int offscreen2W = (int)(MIRROR_SCALE*mScreenW);
         int offscreen2H = (int)(MIRROR_SCALE*mScreenH);
 
-        mQuad1.setStretch(offscreen1W, offscreen1H, 0);
-        mQuad2.setStretch(offscreen2W, offscreen2H, 0);
+        mScaleOffscreen1.set(offscreen1W, offscreen1H, 0);
+        mScaleOffscreen2.set(offscreen2W, offscreen2H, 0);
 
         mOffScreen1 = new DistortedFramebuffer( offscreen1W, offscreen1H, 1, DistortedFramebuffer.NO_DEPTH_NO_STENCIL );
         mOffScreen2 = new DistortedFramebuffer( offscreen2W, offscreen2H, 1, DistortedFramebuffer.NO_DEPTH_NO_STENCIL );
 
-        float headScale = HEAD_SCALE *mScreenH/ mHeadH;
-        mScaleHead.set(headScale,headScale,headScale);
-
-        float scaleW = (float)mScreenW/mMirrorW;
-        float scaleH = (float)mScreenH/mMirrorH;
-
-        mScaleMirror.set( scaleW, scaleH, 1.0f);
+        float headScale = HEAD_SCALE *mScreenH;
+        mScaleHead.set(headScale*mHeadW/mHeadH,headScale,0);
+        mScaleMirror.set( mScreenW, mScreenH, 0);
 
         mMoveOffscreen2.set( (MIRROR_MOVE_H-0.5f+0.5f*MIRROR_SCALE)*mScreenW, (MIRROR_MOVE_V-0.5f+0.5f*MIRROR_SCALE)*mScreenH*mMirrorW/mMirrorH, 0);
         mHeadPosition.set1( (0.5f*HEAD_SCALE - 0.5f + MIRROR_MARGIN*mMirrorW/mMirrorH)*mScreenH );
@@ -207,15 +210,13 @@ class MirrorRenderer implements GLSurfaceView.Renderer
       mHeadW   = bitmapH.getWidth();
       mHeadH   = bitmapH.getHeight();
 
-      mQuadMirror.setStretch(mMirrorW,mMirrorH,0);
-      mQuadHead.setStretch(mHeadW, mHeadH,0);
-
       if( mTextureMirror==null ) mTextureMirror = new DistortedTexture();
       if( mTextureHead  ==null ) mTextureHead   = new DistortedTexture();
 
       mTextureMirror.setTexture(bitmapM);
       mTextureHead.setTexture(bitmapH);
 
+      VertexEffectScale.enable();
       FragmentEffectBrightness.enable();
 
       try
