commit fdddb0b229e1a1c3f44a7ca724bcdac3eb5b3218
Author: Leszek Koltunski <leszek@distoretedandroid.org>
Date:   Mon Jun 12 14:40:55 2017 +0100

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

diff --git a/src/main/java/org/distorted/examples/starwars/StarWarsRenderer.java b/src/main/java/org/distorted/examples/starwars/StarWarsRenderer.java
index 9cdcb05..4433406 100644
--- a/src/main/java/org/distorted/examples/starwars/StarWarsRenderer.java
+++ b/src/main/java/org/distorted/examples/starwars/StarWarsRenderer.java
@@ -28,10 +28,10 @@ import javax.microedition.khronos.opengles.GL10;
 
 import org.distorted.examples.R;
 
+import org.distorted.library.effect.EffectName;
 import org.distorted.library.main.DistortedNode;
 import org.distorted.library.main.DistortedScreen;
 import org.distorted.library.main.MeshFlat;
-import org.distorted.library.EffectNames;
 import org.distorted.library.type.Dynamic1D;
 import org.distorted.library.type.Dynamic3D;
 import org.distorted.library.type.Static1D;
@@ -184,8 +184,8 @@ class StarWarsRenderer implements GLSurfaceView.Renderer, EffectListener
     {
     setupBitmaps();
 
-    DistortedEffects.enableEffect(EffectNames.SMOOTH_ALPHA);
-    DistortedEffects.enableEffect(EffectNames.ALPHA);
+    DistortedEffects.enableEffect(EffectName.SMOOTH_ALPHA);
+    DistortedEffects.enableEffect(EffectName.ALPHA);
 
     try
       {
@@ -371,7 +371,7 @@ class StarWarsRenderer implements GLSurfaceView.Renderer, EffectListener
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 // the library sending messages to us. This is running on a library 'MessageSender' thread.
 
-  public void effectMessage(final EffectMessage em, final long effectID, final EffectNames effectName, final long objectID)
+  public void effectMessage(final EffectMessage em, final long effectID, final long objectID)
     {
     if( em==EffectMessage.EFFECT_FINISHED )
       {
diff --git a/src/main/java/org/distorted/examples/stencil/StencilRenderer.java b/src/main/java/org/distorted/examples/stencil/StencilRenderer.java
index bd0b244..350e99d 100644
--- a/src/main/java/org/distorted/examples/stencil/StencilRenderer.java
+++ b/src/main/java/org/distorted/examples/stencil/StencilRenderer.java
@@ -26,14 +26,16 @@ 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.MatrixEffectRotate;
+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.DistortedNode;
 import org.distorted.library.main.DistortedScreen;
 import org.distorted.library.main.DistortedTexture;
-import org.distorted.library.EffectNames;
-import org.distorted.library.EffectTypes;
 import org.distorted.library.main.MeshCubes;
 import org.distorted.library.main.MeshFlat;
 import org.distorted.library.main.MeshObject;
@@ -54,9 +56,9 @@ class StencilRenderer implements GLSurfaceView.Renderer
     private GLSurfaceView mView;
     private DistortedScreen mScreen;
     private DistortedTexture mCubeTex, mFloorTex, mFBOTex;
-    private DistortedEffects mCube1Effects, mCube2Effects, mFloorEffects, mFBOEffects;
     private DistortedNode mCube1Node, mCube2Node, mFloorNode, mFBONode;
     private MeshObject mCubeMesh, mQuad;
+    private Static3D mCubeMove, mCubeScale, mFloorScale, mFloorMove, mFBOScale;
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
@@ -89,21 +91,27 @@ class StencilRenderer implements GLSurfaceView.Renderer
       mCubeMesh = new MeshCubes(1,1,1);
       mQuad     = new MeshFlat(1,1);
 
+      mCubeMove   = new Static3D(0,0,0);
+      mCubeScale  = new Static3D(1,1,1);
+      mFloorScale = new Static3D(1,1,1);
+      mFloorMove  = new Static3D(0,0,0);
+      mFBOScale   = new Static3D(1,1,1);
+
       mCubeTex   = new DistortedTexture(1,1);
       mFloorTex  = new DistortedTexture(1,1);
       mFBOTex    = new DistortedTexture(1,1);
 
-      mCube1Effects = new DistortedEffects();
-      mCube2Effects = new DistortedEffects();
-      mFloorEffects = new DistortedEffects();
-      mFBOEffects   = new DistortedEffects();
+      DistortedEffects cube1Effects = new DistortedEffects();
+      DistortedEffects cube2Effects = new DistortedEffects();
+      DistortedEffects floorEffects = new DistortedEffects();
+      DistortedEffects FBOEffects   = new DistortedEffects();
 
-      mCube2Effects.brightness(new Static1D(0.5f));
+      cube2Effects.apply( new FragmentEffectBrightness(new Static1D(0.5f)) );
 
-      mCube1Node = new DistortedNode(mCubeTex ,mCube1Effects,mCubeMesh );
-      mCube2Node = new DistortedNode(mCubeTex ,mCube2Effects,mCubeMesh );
-      mFloorNode = new DistortedNode(mFloorTex,mFloorEffects,mQuad     );
-      mFBONode   = new DistortedNode(mFBOTex  ,mFBOEffects  ,mQuad     );
+      mCube1Node = new DistortedNode(mCubeTex ,cube1Effects,mCubeMesh );
+      mCube2Node = new DistortedNode(mCubeTex ,cube2Effects,mCubeMesh );
+      mFloorNode = new DistortedNode(mFloorTex,floorEffects,mQuad     );
+      mFBONode   = new DistortedNode(mFBOTex  ,FBOEffects  ,mQuad     );
 
       ///////////////// The Meat of this App - shamelessly ripped off https://open.gl/depthstencils ///////////////////////
       /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
@@ -133,19 +141,7 @@ class StencilRenderer implements GLSurfaceView.Renderer
       mView.setEGLConfigChooser(5,6,5,0,16,8);       // Screen: 16 bit depth, 8 bit STENCIL
 
       setScreen(true);
-      }
-
-///////////////////////////////////////////////////////////////////////////////////////////////////
-
-    public void onDrawFrame(GL10 glUnused) 
-      {
-      mScreen.render(System.currentTimeMillis());
-      }
 
-///////////////////////////////////////////////////////////////////////////////////////////////////
-    
-    public void onSurfaceChanged(GL10 glUnused, int width, int height) 
-      {
       float cw = mCubeTex.getWidth();
       float ch = mCubeTex.getHeight();
       float cd = mCubeTex.getDepth(mCubeMesh);
@@ -154,12 +150,6 @@ class StencilRenderer implements GLSurfaceView.Renderer
       float fh = mFloorTex.getHeight();
       float fd = mFloorTex.getDepth(mQuad);
 
-      float bw = mFBOTex.getWidth();
-      float bh = mFBOTex.getHeight();
-
-      float cubeScale = 0.4f*(width>height ? height/ch:width/cw);
-      float floorScale= 0.8f*(width>height ? height/fh:width/fw);
-
       Static3D cubeCenter = new Static3D(cw/2,ch  ,-cd/2);
       Static3D floorCenter= new Static3D(fw/2,fh/2,-fd/2);
 
@@ -177,39 +167,72 @@ class StencilRenderer implements GLSurfaceView.Renderer
       Static1D rotSt1 = new Static1D(angle);
       Static1D rotSt2 = new Static1D(angle-90.0f);
 
+      MatrixEffectRotate rot1 = new MatrixEffectRotate(rotSt1, axisX, cubeCenter);
+      MatrixEffectRotate rot2 = new MatrixEffectRotate(rotDyn, axisY, cubeCenter);
+      MatrixEffectScale  scal = new MatrixEffectScale(mCubeScale);
+      MatrixEffectMove   move = new MatrixEffectMove(mCubeMove);
+
       /////////////////////////////////////////////////////////////////////////////////////////////////////
       // Those Matrix effects, i.e. correct positioning of Objects on the Screen, is admittedly quite hard.
       // Figured out of experimentation.
       /////////////////////////////////////////////////////////////////////////////////////////////////////
       // Upper cube
-      mCube1Effects.abortEffects(EffectTypes.MATRIX);
-      mCube1Effects.move( new Static3D( (width-cubeScale*cw)/2 , height/2-cubeScale*ch , cubeScale *cd/2) );
-      mCube1Effects.scale(cubeScale);
-      mCube1Effects.rotate(rotSt1, axisX, cubeCenter);
-      mCube1Effects.rotate(rotDyn, axisY, cubeCenter);
+      cube1Effects.apply( move );
+      cube1Effects.apply( scal );
+      cube1Effects.apply( rot1 );
+      cube1Effects.apply( rot2 );
 
       /////////////////////////////////////////////////////////////////////////////////////////////////////
       // Floor
-      mFloorEffects.abortEffects(EffectTypes.MATRIX);
-      mFloorEffects.move( new Static3D( (width-floorScale*fw)/2 ,height/2-floorScale*fh/2, floorScale*fd/2) );
-      mFloorEffects.scale(floorScale);
-      mFloorEffects.rotate(rotSt2, axisX, floorCenter);
-      mFloorEffects.rotate(rotDyn, axisZ, floorCenter);
+      floorEffects.apply( new MatrixEffectMove(mFloorMove));
+      floorEffects.apply( new MatrixEffectScale(mFloorScale) );
+      floorEffects.apply( new MatrixEffectRotate(rotSt2, axisX, floorCenter) );
+      floorEffects.apply( new MatrixEffectRotate(rotDyn, axisZ, floorCenter) );
 
       /////////////////////////////////////////////////////////////////////////////////////////////////////
       // Lower cube
-      mCube2Effects.abortEffects(EffectTypes.MATRIX);
-      mCube2Effects.move( new Static3D( (width-cubeScale*cw)/2 , height/2-cubeScale*ch , cubeScale *cd/2) );
-      mCube2Effects.scale(cubeScale);
-      mCube2Effects.rotate(rotSt1, axisX, cubeCenter);
-      mCube2Effects.rotate(rotDyn, axisY, cubeCenter);
-      mCube2Effects.scale(new Static3D(1,-1,1) );
-      mCube2Effects.move( new Static3D( 0, -2*ch , 0) );
+      cube2Effects.apply( move );
+      cube2Effects.apply( scal );
+      cube2Effects.apply( rot1 );
+      cube2Effects.apply( rot2 );
+      cube2Effects.apply( new MatrixEffectScale(new Static3D(1,-1,1)) );
+      cube2Effects.apply( new MatrixEffectMove(new Static3D( 0, -2*ch , 0)) );
 
       /////////////////////////////////////////////////////////////////////////////////////////////////////
       // Framebuffer
-      mFBOEffects.abortEffects(EffectTypes.MATRIX);
-      mFBOEffects.scale( new Static3D( (float)width/bw, (float)height/bh, 1.0f) );
+      FBOEffects.apply( new MatrixEffectScale(mFBOScale) );
+      }
+
+///////////////////////////////////////////////////////////////////////////////////////////////////
+
+    public void onDrawFrame(GL10 glUnused) 
+      {
+      mScreen.render(System.currentTimeMillis());
+      }
+
+///////////////////////////////////////////////////////////////////////////////////////////////////
+    
+    public void onSurfaceChanged(GL10 glUnused, int width, int height) 
+      {
+      float cw = mCubeTex.getWidth();
+      float ch = mCubeTex.getHeight();
+      float cd = mCubeTex.getDepth(mCubeMesh);
+
+      float fw = mFloorTex.getWidth();
+      float fh = mFloorTex.getHeight();
+      float fd = mFloorTex.getDepth(mQuad);
+
+      float bw = mFBOTex.getWidth();
+      float bh = mFBOTex.getHeight();
+
+      float cubeScale = 0.4f*(width>height ? height/ch:width/cw);
+      float floorScale= 0.8f*(width>height ? height/fh:width/fw);
+
+      mCubeMove.set((width-cubeScale*cw)/2 , height/2-cubeScale*ch , cubeScale *cd/2 );
+      mCubeScale.set(cubeScale,cubeScale,cubeScale);
+      mFloorMove.set((width-floorScale*fw)/2 ,height/2-floorScale*fh/2, floorScale*fd/2 );
+      mFloorScale.set(floorScale,floorScale,floorScale);
+      mFBOScale.set((float)width/bw, (float)height/bh, 1.0f );
 
       mFBONode.resize( (int)((float)width/bw), (int)((float)height/bh) );
       mScreen.resize( width,height);
