commit d38672b1179f1f08386f858d0da079697c626fd3
Author: Leszek Koltunski <leszek@distoretedandroid.org>
Date:   Mon Jun 12 12:30:05 2017 +0100

    Further progress with Apps: 21 (out of 30) compile now.

diff --git a/src/main/java/org/distorted/examples/multiblur/MultiblurRenderer.java b/src/main/java/org/distorted/examples/multiblur/MultiblurRenderer.java
index c576709..27186e9 100644
--- a/src/main/java/org/distorted/examples/multiblur/MultiblurRenderer.java
+++ b/src/main/java/org/distorted/examples/multiblur/MultiblurRenderer.java
@@ -24,19 +24,19 @@ import android.graphics.BitmapFactory;
 import android.opengl.GLSurfaceView;
 
 import org.distorted.examples.R;
+import org.distorted.library.effect.EffectName;
+import org.distorted.library.effect.MatrixEffectMove;
+import org.distorted.library.effect.MatrixEffectQuaternion;
+import org.distorted.library.effect.MatrixEffectScale;
+import org.distorted.library.effect.PostprocessEffectBlur;
 import org.distorted.library.main.Distorted;
 import org.distorted.library.main.DistortedEffects;
 import org.distorted.library.main.DistortedEffectsPostprocess;
 import org.distorted.library.main.DistortedNode;
 import org.distorted.library.main.DistortedScreen;
 import org.distorted.library.main.DistortedTexture;
-import org.distorted.library.EffectNames;
 import org.distorted.library.main.EffectQuality;
-import org.distorted.library.EffectTypes;
 import org.distorted.library.main.MeshCubes;
-import org.distorted.library.type.Dynamic1D;
-import org.distorted.library.type.Dynamic3D;
-import org.distorted.library.type.DynamicQuat;
 import org.distorted.library.type.Static1D;
 import org.distorted.library.type.Static3D;
 import org.distorted.library.type.Static4D;
@@ -68,17 +68,14 @@ class MultiblurRenderer implements GLSurfaceView.Renderer
 
     private GLSurfaceView mView;
     private DistortedTexture mTex1, mTex2;
-    private DistortedEffects[] mEffects;
     private DistortedNode[] mNode;
     private DistortedEffectsPostprocess mPostEffects;
     private Static3D[]  mMoveVector;
-    private Dynamic3D[] mMoveDynamic;
     private Static1D  mBlurVector;
-    private Dynamic1D  mBlurDynamic;
     private DistortedScreen mScreen;
-    private DynamicQuat mQuatInt1, mQuatInt2;
     private int mDistance;
     private boolean[] mBlurStatus;
+    private Static3D mMove, mScale, mCenter;
 
     Static4D mQuat1, mQuat2;
     int mScreenMin;
@@ -91,26 +88,21 @@ class MultiblurRenderer implements GLSurfaceView.Renderer
       mDistance = -1;
 
       mBlurStatus = new boolean[NUM_OBJECTS];
-      mMoveDynamic= new Dynamic3D[NUM_OBJECTS];
       mMoveVector = new Static3D[NUM_OBJECTS];
       mNode       = new DistortedNode[NUM_OBJECTS];
-      mEffects    = new DistortedEffects[NUM_OBJECTS];
       mPostEffects= new DistortedEffectsPostprocess();
 
+      DistortedEffects[] effects= new DistortedEffects[NUM_OBJECTS];
+
       for(int i=0; i<NUM_OBJECTS; i++)
         {
-        mMoveVector[i]  = new Static3D(0,0,0);
-        mEffects[i]     = new DistortedEffects();
-        mMoveDynamic[i] = new Dynamic3D();
-
-        mMoveDynamic[i].add(mMoveVector[i]);
+        mMoveVector[i] = new Static3D(0,0,0);
+        effects[i]     = new DistortedEffects();
         mBlurStatus[i] = false;
         }
 
-      mBlurDynamic= new Dynamic1D();
       mBlurVector = new Static1D(10);
-      mBlurDynamic.add(mBlurVector);
-      mPostEffects.blur(mBlurDynamic);
+      mPostEffects.apply( new PostprocessEffectBlur(mBlurVector) );
 
       MeshCubes mesh = new MeshCubes(1,1,1);
 
@@ -119,24 +111,36 @@ class MultiblurRenderer implements GLSurfaceView.Renderer
 
       mQuat1 = new Static4D(0,0,0,1);  // unity
       mQuat2 = new Static4D(0,0,0,1);  // quaternions
-      
-      mQuatInt1 = new DynamicQuat(0,0.5f);
-      mQuatInt2 = new DynamicQuat(0,0.5f);
-
-      mQuatInt1.add(mQuat1);
-      mQuatInt2.add(mQuat2);
 
       mScreen = new DistortedScreen(mView);
       mScreen.setDebug(DistortedScreen.DEBUG_FPS);
 
       for(int i=0; i<NUM_OBJECTS; i++)
         {
-        mNode[i] = new DistortedNode(i < NUM_OBJECTS / 2 ? mTex1 : mTex2, mEffects[i], mesh);
+        mNode[i] = new DistortedNode(i < NUM_OBJECTS / 2 ? mTex1 : mTex2, effects[i], mesh);
         mScreen.attach(mNode[i]);
         }
 
       mBlurStatus[0] = true;
       mNode[0].setPostprocessEffects(mPostEffects);
+
+      mMove   = new Static3D(0,0,0);
+      mScale  = new Static3D(1,1,1);
+      mCenter = new Static3D(0,0,0);
+
+      MatrixEffectMove moveEffect = new MatrixEffectMove(mMove);
+      MatrixEffectScale scaleEffect = new MatrixEffectScale(mScale);
+      MatrixEffectQuaternion quatEffect1 = new MatrixEffectQuaternion(mQuat1, mCenter);
+      MatrixEffectQuaternion quatEffect2 = new MatrixEffectQuaternion(mQuat2, mCenter);
+
+      for(int i=0; i<NUM_OBJECTS; i++)
+        {
+        effects[i].apply(moveEffect);
+        effects[i].apply(scaleEffect);
+        effects[i].apply(quatEffect1);
+        effects[i].apply(quatEffect2);
+        effects[i].apply(new MatrixEffectMove(mMoveVector[i]));
+        }
       }
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
@@ -160,20 +164,9 @@ class MultiblurRenderer implements GLSurfaceView.Renderer
       mScreenMin = width<height ? width:height;
 
     	float factor    = 0.15f*mScreenMin/OBJ_SIZE;
-      Static3D center = new Static3D( (float)OBJ_SIZE/2, (float)OBJ_SIZE/2, -(float)OBJ_SIZE/2 );
-      Static3D moveVec= new Static3D( (width -factor*OBJ_SIZE)/2 ,(height-factor*OBJ_SIZE)/2 ,0);
-
-      for(int i=0; i<NUM_OBJECTS; i++)
-        {
-        mEffects[i].abortEffects(EffectTypes.MATRIX);
-
-        mEffects[i].move(moveVec);
-        mEffects[i].scale(factor);
-        mEffects[i].quaternion(mQuatInt1, center);
-        mEffects[i].quaternion(mQuatInt2, center);
-        mEffects[i].move(mMoveDynamic[i]);
-        }
-
+    	mScale.set(factor,factor,factor);
+      mCenter.set((float)OBJ_SIZE/2, (float)OBJ_SIZE/2, -(float)OBJ_SIZE/2 );
+      mMove.set( (width -factor*OBJ_SIZE)/2 ,(height-factor*OBJ_SIZE)/2 ,0);
       computeMoveVectors();
       mScreen.resize(width, height);
       }
@@ -204,7 +197,7 @@ class MultiblurRenderer implements GLSurfaceView.Renderer
       mTex1.setTexture(bitmap1);
       mTex2.setTexture(bitmap2);
 
-      DistortedEffects.enableEffect(EffectNames.BLUR);
+      DistortedEffects.enableEffect(EffectName.BLUR);
 
       try
         {
