commit 7958d84389088d477b6851b60fa2279f00307c1b
Author: Leszek Koltunski <leszek@koltunski.pl>
Date:   Fri Apr 23 22:13:45 2021 +0200

    MeshBase's 'MAX_NUM_COMPONENTS' is not a constant - rename!

diff --git a/src/main/java/org/distorted/library/effect/PostprocessEffectGlow.java b/src/main/java/org/distorted/library/effect/PostprocessEffectGlow.java
index e706d46..0230f83 100644
--- a/src/main/java/org/distorted/library/effect/PostprocessEffectGlow.java
+++ b/src/main/java/org/distorted/library/effect/PostprocessEffectGlow.java
@@ -35,8 +35,8 @@ public class PostprocessEffectGlow extends PostprocessEffect
   {
   private static final int MAX_RADIUS = 50;
 
-  private Data2D mGlowHaloAndRadius;
-  private Data4D mColor;
+  private final Data2D mGlowHaloAndRadius;
+  private final Data4D mColor;
 
   private static final float[] GAUSSIAN =   // G(0.00), G(0.03), G(0.06), ..., G(3.00), 0
     {                                       // where G(x)= (1/(sqrt(2*PI))) * e^(-(x^2)/2). The last 0 terminates.
@@ -58,10 +58,10 @@ public class PostprocessEffectGlow extends PostprocessEffect
   // i.e. k(i)=floor((i+3)/2).  (the 'i' in k(i) means 'blur taking into account the present pixel and 'i' pixels
   // in all 4 directions)
   // We need room for MAX_BLUR of them, and sum(i=0...N, floor((i+3)/2)) = N + floor(N*N/4)
-  private static float[] weightsCache = new float[MAX_RADIUS + MAX_RADIUS*MAX_RADIUS/4];
-  private static float[] offsetsCache = new float[MAX_RADIUS + MAX_RADIUS*MAX_RADIUS/4];
-  private static float[] mWeights = new float[MAX_RADIUS];
-  private static float[] mOffsets = new float[MAX_RADIUS];
+  private static final float[] weightsCache = new float[MAX_RADIUS + MAX_RADIUS*MAX_RADIUS/4];
+  private static final float[] offsetsCache = new float[MAX_RADIUS + MAX_RADIUS*MAX_RADIUS/4];
+  private static final float[] mWeights = new float[MAX_RADIUS];
+  private static final float[] mOffsets = new float[MAX_RADIUS];
 
   private static DistortedProgram mProgram1, mProgram2;
   private static int mIndex1, mIndex2;
diff --git a/src/main/java/org/distorted/library/mesh/MeshBase.java b/src/main/java/org/distorted/library/mesh/MeshBase.java
index d6cb082..ebc87f5 100644
--- a/src/main/java/org/distorted/library/mesh/MeshBase.java
+++ b/src/main/java/org/distorted/library/mesh/MeshBase.java
@@ -52,8 +52,6 @@ public abstract class MeshBase
    private static final int ASSOC_UBO_BINDING  = 3;
    private static final int CENTER_UBO_BINDING = 4;
 
-   public static int MAX_EFFECT_COMPONENTS= 100;
-
    // sizes of attributes of an individual vertex.
    private static final int POS_DATA_SIZE= 3; // vertex coordinates: x,y,z
    private static final int NOR_DATA_SIZE= 3; // normal vector: x,y,z
@@ -86,6 +84,8 @@ public abstract class MeshBase
    private static final int TEX_COMP_SIZE = 5; // 5 four-byte entities inside the component
 
    private static boolean mUseCenters;
+   private static int mStride;
+   private static int mMaxComponents = 100;
 
    private boolean mShowNormals;              // when rendering this mesh, draw normal vectors?
    private InternalBuffer mVBO1, mVBO2, mTFO; // main vertex buffer and transform feedback buffer
@@ -96,7 +96,6 @@ public abstract class MeshBase
    private final UniformBlockAssociation mUBA;
    private UniformBlockCenter mUBC;
    private boolean mStrideCorrected;
-   private static int mStride;
 
    DeferredJobs.JobNode[] mJobNode;
 
@@ -399,7 +398,7 @@ public abstract class MeshBase
          if( j==numEffComponents-1 ) index += extraVerticesAfter;
          mEffComponent.add(index);
 
-         if( origEffComponents<MAX_EFFECT_COMPONENTS )
+         if( origEffComponents<mMaxComponents )
            {
            mUBA.copy(origEffComponents, mesh.mUBA, j);
            if( mUseCenters ) mUBC.copy(origEffComponents, mesh.mUBC, j);
@@ -570,7 +569,7 @@ public abstract class MeshBase
 
    public static int getMaxEffComponents()
      {
-     return MAX_EFFECT_COMPONENTS;
+     return mMaxComponents;
      }
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
@@ -579,7 +578,7 @@ public abstract class MeshBase
  */
    public static void setMaxEffComponents(int max)
      {
-     MAX_EFFECT_COMPONENTS = max;
+     mMaxComponents = max;
      }
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
@@ -1246,7 +1245,7 @@ public abstract class MeshBase
  */
    public void setEffectAssociation(int component, int andAssociation, int equAssociation)
      {
-     if( component>=0 && component<MAX_EFFECT_COMPONENTS )
+     if( component>=0 && component<mMaxComponents )
        {
        if( mJobNode[0]==null )
          {
@@ -1274,7 +1273,7 @@ public abstract class MeshBase
  */
    public void setComponentCenter(int component, float centerX, float centerY, float centerZ)
      {
-     if( component>=0 && component<MAX_EFFECT_COMPONENTS )
+     if( component>=0 && component<mMaxComponents )
        {
        if( mJobNode[0]==null )
          {
diff --git a/src/main/java/org/distorted/library/uniformblock/UniformBlockAssociation.java b/src/main/java/org/distorted/library/uniformblock/UniformBlockAssociation.java
index c98f3da..7133d18 100644
--- a/src/main/java/org/distorted/library/uniformblock/UniformBlockAssociation.java
+++ b/src/main/java/org/distorted/library/uniformblock/UniformBlockAssociation.java
@@ -22,8 +22,7 @@ package org.distorted.library.uniformblock;
 import android.opengl.GLES30;
 
 import org.distorted.library.main.InternalBuffer;
-
-import static org.distorted.library.mesh.MeshBase.MAX_EFFECT_COMPONENTS;
+import org.distorted.library.mesh.MeshBase;
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 /**
@@ -39,6 +38,7 @@ public class UniformBlockAssociation
   private static final int LOC_EQU = 1;
 
   private final InternalBuffer mUBO;
+  private final int mMax;
   private int[] mAssociations;
   private int mStride;
 
@@ -46,10 +46,11 @@ public class UniformBlockAssociation
 
   public UniformBlockAssociation()
     {
+    mMax = MeshBase.getMaxEffComponents();
     mStride = DEFAULT_STRIDE;
-    mAssociations= new int[mStride*MAX_EFFECT_COMPONENTS];
+    mAssociations= new int[mStride*mMax];
 
-    for(int i=0; i<MAX_EFFECT_COMPONENTS; i++)
+    for(int i=0; i<mMax; i++)
       {
       mAssociations[mStride*i+LOC_AND] = DEFAULT_ASSOCIATION;
       mAssociations[mStride*i+LOC_EQU] = i;
@@ -62,6 +63,7 @@ public class UniformBlockAssociation
 
   public UniformBlockAssociation(UniformBlockAssociation original)
     {
+    mMax = original.mMax;
     mStride = original.mStride;
     int size = original.mAssociations.length;
     mAssociations= new int[size];
@@ -77,9 +79,9 @@ public class UniformBlockAssociation
     {
     if( mStride != stride && stride!=0 )
       {
-      int[] tmp = new int[stride*MAX_EFFECT_COMPONENTS];
+      int[] tmp = new int[stride*mMax];
 
-      for(int i=0; i<MAX_EFFECT_COMPONENTS; i++)
+      for(int i=0; i<mMax; i++)
         {
         tmp[stride*i+LOC_AND] = mAssociations[mStride*i+LOC_AND];
         tmp[stride*i+LOC_EQU] = mAssociations[mStride*i+LOC_EQU];
@@ -111,7 +113,7 @@ public class UniformBlockAssociation
 
   public int getIndex()
     {
-    return mUBO.createImmediatelyInt( 4*mStride*MAX_EFFECT_COMPONENTS, mAssociations);
+    return mUBO.createImmediatelyInt( 4*mStride*mMax, mAssociations);
     }
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
diff --git a/src/main/java/org/distorted/library/uniformblock/UniformBlockCenter.java b/src/main/java/org/distorted/library/uniformblock/UniformBlockCenter.java
index 72dbba0..986ee04 100644
--- a/src/main/java/org/distorted/library/uniformblock/UniformBlockCenter.java
+++ b/src/main/java/org/distorted/library/uniformblock/UniformBlockCenter.java
@@ -22,8 +22,7 @@ package org.distorted.library.uniformblock;
 import android.opengl.GLES30;
 
 import org.distorted.library.main.InternalBuffer;
-
-import static org.distorted.library.mesh.MeshBase.MAX_EFFECT_COMPONENTS;
+import org.distorted.library.mesh.MeshBase;
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 /**
@@ -33,23 +32,24 @@ import static org.distorted.library.mesh.MeshBase.MAX_EFFECT_COMPONENTS;
  */
 public class UniformBlockCenter
   {
-  private static final int BLOCK_SIZE = 16*MAX_EFFECT_COMPONENTS;
-
   private final InternalBuffer mUBO;
   private final float[] mArray;
+  private final int mMax;
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
   public UniformBlockCenter()
     {
-    mArray= new float[BLOCK_SIZE/4];
-    mUBO = new InternalBuffer(GLES30.GL_UNIFORM_BUFFER, GLES30.GL_STATIC_READ);
+    mMax  = MeshBase.getMaxEffComponents();
+    mArray= new float[4*mMax];
+    mUBO  = new InternalBuffer(GLES30.GL_UNIFORM_BUFFER, GLES30.GL_STATIC_READ);
     }
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
   public UniformBlockCenter(UniformBlockCenter original)
     {
+    mMax = original.mMax;
     int size = original.mArray.length;
     mArray= new float[size];
     System.arraycopy(original.mArray, 0, mArray, 0, size);
@@ -71,7 +71,7 @@ public class UniformBlockCenter
 
   public int getIndex()
     {
-    return mUBO.createImmediatelyFloat( BLOCK_SIZE, mArray);
+    return mUBO.createImmediatelyFloat( 16*mMax, mArray);
     }
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
