commit c8ecd3ac7eece9f5fa5450c8a9ad506701ee37af
Author: Leszek Koltunski <leszek@distoretedandroid.org>
Date:   Mon Jun 12 14:10:11 2017 +0100

    Further progress with Apps: 26 (out of 31) compile now.

diff --git a/src/main/java/org/distorted/examples/mirror/MirrorRenderer.java b/src/main/java/org/distorted/examples/mirror/MirrorRenderer.java
index b8d8dee..fd523bc 100644
--- a/src/main/java/org/distorted/examples/mirror/MirrorRenderer.java
+++ b/src/main/java/org/distorted/examples/mirror/MirrorRenderer.java
@@ -25,13 +25,15 @@ import android.opengl.GLSurfaceView;
 
 import org.distorted.examples.R;
 import org.distorted.library.effect.EffectName;
+import org.distorted.library.effect.FragmentEffectBrightness;
+import org.distorted.library.effect.MatrixEffectMove;
+import org.distorted.library.effect.MatrixEffectScale;
 import org.distorted.library.main.Distorted;
 import org.distorted.library.main.DistortedEffects;
 import org.distorted.library.main.DistortedFramebuffer;
 import org.distorted.library.main.DistortedScreen;
 import org.distorted.library.main.DistortedTexture;
 import org.distorted.library.main.MeshFlat;
-import org.distorted.library.type.Dynamic3D;
 import org.distorted.library.type.Static1D;
 import org.distorted.library.type.Static3D;
 
@@ -59,10 +61,9 @@ class MirrorRenderer implements GLSurfaceView.Renderer
    private DistortedFramebuffer mOffScreen1, mOffScreen2;
    private DistortedScreen mScreen;
    private MeshFlat mQuad;
-   private Static3D mHeadPosition;
-   private Dynamic3D mHeadDyn;
-   private int mX;
+   private Static3D mHeadPosition, mScaleMirror, mMoveOffscreen2, mScaleHead;
 
+   private int mX;
    private int mMirrorW, mMirrorH, mHeadW, mHeadH;
    private int mScreenW, mScreenH;
 
@@ -82,9 +83,17 @@ class MirrorRenderer implements GLSurfaceView.Renderer
 
       mX = MirrorActivity.INIT_POSITION;
 
-      mHeadPosition = new Static3D(0,0,0);
-      mHeadDyn = new Dynamic3D();
-      mHeadDyn.add(mHeadPosition);
+      mHeadPosition    = new Static3D(0,0,0);
+      mScaleMirror     = new Static3D(1,1,1);
+      mMoveOffscreen2  = new Static3D(0,0,0);
+      mScaleHead       = new Static3D(1,1,1);
+
+      mEffectsMirror.apply( new MatrixEffectScale(mScaleMirror));
+      mEffectsOffscreen1.apply( new MatrixEffectScale( new Static3D(MIRROR_SCALE,MIRROR_SCALE,MIRROR_SCALE)));
+      mEffectsOffscreen2.apply( new MatrixEffectMove(mMoveOffscreen2) );
+      mEffectsHead.apply( new MatrixEffectMove(mHeadPosition) );
+      mEffectsHead.apply( new MatrixEffectScale(mScaleHead) );
+      mEffectsOffscreen1.apply(new FragmentEffectBrightness(new Static1D(MIRROR_BRIGHTNESS)));
       }
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
@@ -132,19 +141,11 @@ class MirrorRenderer implements GLSurfaceView.Renderer
         mOffScreen1 = new DistortedFramebuffer(mScreenW,mScreenH);
         mOffScreen2 = new DistortedFramebuffer( (int)(MIRROR_SCALE*mScreenW), (int)(MIRROR_SCALE*mScreenH) );
 
-        mEffectsHead.abortAllEffects();
-        mEffectsMirror.abortAllEffects();
-        mEffectsOffscreen1.abortAllEffects();
-        mEffectsOffscreen2.abortAllEffects();
-
-        mEffectsMirror.scale( new Static3D( (float)mScreenW/mMirrorW, (float)mScreenH/mMirrorH, 1.0f) );
-        mEffectsOffscreen1.scale(MIRROR_SCALE);
-        mEffectsOffscreen1.brightness(new Static1D(MIRROR_BRIGHTNESS));
-        mEffectsOffscreen2.move( new Static3D( MIRROR_MOVE*mScreenW, MIRROR_MOVE*mScreenH*mMirrorW/mMirrorH, 0) );
+        mScaleMirror.set( (float)mScreenW/mMirrorW, (float)mScreenH/mMirrorH, 1.0f);
+        mMoveOffscreen2.set( MIRROR_MOVE*mScreenW, MIRROR_MOVE*mScreenH*mMirrorW/mMirrorH, 0);
 
-        mEffectsHead.move(mHeadDyn);
         float headScale = HEAD_SCALE *mScreenH/ mHeadH;
-        mEffectsHead.scale(headScale);
+        mScaleHead.set(headScale,headScale,headScale);
         mHeadPosition.set2( mScreenH*(1.0f-MIRROR_MARGIN*mMirrorW/mMirrorH) - headScale* mHeadH);
         setPosition(mX);
 
