commit 45850ccea42ecea7dec192ce6757d73b78577b8b
Author: leszek <leszek@koltunski.pl>
Date:   Tue Dec 10 15:47:23 2024 +0100

    SingleMeshCube: add Glow

diff --git a/src/main/java/org/distorted/examples/singlemesh/SingleMeshRenderer.java b/src/main/java/org/distorted/examples/singlemesh/SingleMeshRenderer.java
index 45dd491..c3b4f43 100644
--- a/src/main/java/org/distorted/examples/singlemesh/SingleMeshRenderer.java
+++ b/src/main/java/org/distorted/examples/singlemesh/SingleMeshRenderer.java
@@ -28,6 +28,7 @@ import android.opengl.GLSurfaceView;
 import org.distorted.library.effect.MatrixEffectMove;
 import org.distorted.library.effect.MatrixEffectQuaternion;
 import org.distorted.library.effect.MatrixEffectScale;
+import org.distorted.library.effect.PostprocessEffectGlow;
 import org.distorted.library.effect.VertexEffectDeform;
 import org.distorted.library.effect.VertexEffectDisappear;
 import org.distorted.library.effect.VertexEffectMove;
@@ -43,6 +44,7 @@ import org.distorted.library.mesh.MeshSquare;
 import org.distorted.library.type.Dynamic1D;
 import org.distorted.library.type.DynamicQuat;
 import org.distorted.library.type.Static1D;
+import org.distorted.library.type.Static2D;
 import org.distorted.library.type.Static3D;
 import org.distorted.library.type.Static4D;
 
@@ -104,6 +106,7 @@ class SingleMeshRenderer implements GLSurfaceView.Renderer, DistortedLibrary.Lib
            new Static3D(+DIST,+DIST,-DIST),
            new Static3D(+DIST,+DIST,+DIST),
          };
+    private static final int NUM_CUBITS = CUBIT_MOVES.length;
 
     private final Resources mResources;
     private final DistortedScreen mScreen;
@@ -111,6 +114,7 @@ class SingleMeshRenderer implements GLSurfaceView.Renderer, DistortedLibrary.Lib
     private final Static3D mScale;
     private final VertexEffectRotate mRotate;
     private final VertexEffectDisappear mDisappear;
+    private final PostprocessEffectGlow mGlow;
     private final Dynamic1D mAngleDyn;
     private final Static1D mAngle;
     private final Static3D mAxis;
@@ -127,7 +131,7 @@ class SingleMeshRenderer implements GLSurfaceView.Renderer, DistortedLibrary.Lib
 
     SingleMeshRenderer(GLSurfaceView v)
       {
-      mInvisible = new boolean[CUBIT_MOVES.length];
+      mInvisible = new boolean[NUM_CUBITS];
       mResources = v.getResources();
 
       mScreen = new DistortedScreen();
@@ -154,12 +158,18 @@ class SingleMeshRenderer implements GLSurfaceView.Renderer, DistortedLibrary.Lib
       mDisappear = new VertexEffectDisappear();
       mDisappear.setMeshAssociation(0,-1);
 
+      final float HALO_TO_RADIUS = 0.2f;
+      Static2D haloRadius= new Static2D(25*HALO_TO_RADIUS,25);
+      Static4D color     = new Static4D(1.0f,0.0f,0.0f,0.5f); // half-transparent red
+      mGlow  = new PostprocessEffectGlow(haloRadius,color);
+
       mEffects = new DistortedEffects();
       mEffects.apply( mRotate );
       mEffects.apply( mDisappear );
       mEffects.apply( new MatrixEffectQuaternion(quatInt2, center) );
       mEffects.apply( new MatrixEffectQuaternion(quatInt1, center) );
       mEffects.apply( new MatrixEffectScale(mScale));
+      mEffects.apply( mGlow );
 
       mScreen.glClearColor(1.0f, 1.0f, 1.0f, 1.0f);
       }
@@ -395,21 +405,19 @@ class SingleMeshRenderer implements GLSurfaceView.Renderer, DistortedLibrary.Lib
 
     private MeshBase createMesh()
       {
-      final int NUM_CUBITS = CUBIT_MOVES.length;
       MeshBase[] cubits = new MeshBase[NUM_CUBITS];
 
       cubits[NUM_CUBITS-1] = createCubitMesh();   // NUM_CUBITS-1 (or anything non-zero!)
 
-      for(int i=0; i<NUM_CUBITS-1; i++) cubits[i] = cubits[NUM_CUBITS-1].copy(true);
-
       for(int i=0; i<NUM_CUBITS; i++)
         {
+        cubits[i] = cubits[NUM_CUBITS-1].copy(true);
         cubits[i].apply( new MatrixEffectMove(CUBIT_MOVES[i]), 1,0);
         cubits[i].setTextureMap(TEXTURE_MAP[i],0);
         }
 
       MeshBase result = new MeshJoined(cubits);
-      for(int i=0; i<CUBIT_MOVES.length; i++) result.setEffectAssociation( i, (1<<i), 0);
+      for(int i=0; i<NUM_CUBITS; i++) result.setEffectAssociation( i, (1<<i), 0);
 
       return result;
       }
