commit b547aaba66cf6b9376a03c501870d75a90d5930b
Author: leszek <leszek@koltunski.pl>
Date:   Tue Jun 6 00:04:29 2017 +0100

    Some progress with Effect classes.

diff --git a/src/main/java/org/distorted/library/Distorted.java b/src/main/java/org/distorted/library/Distorted.java
index 07d345b..87c8bd8 100644
--- a/src/main/java/org/distorted/library/Distorted.java
+++ b/src/main/java/org/distorted/library/Distorted.java
@@ -25,9 +25,6 @@ import android.content.pm.ConfigurationInfo;
 import android.content.res.Resources;
 import org.distorted.library.program.*;
 
-import org.distorted.library.effect.*;
-
-
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 /**
  * A singleton class used to control various global settings.
@@ -122,19 +119,6 @@ public class Distorted
     EffectQueuePostprocess.createProgram(resources);
     EffectMessageSender.startSending();
 
-    Effect.reset();
-
-    String[] classes = Effect.getClassesOfPackage(context,"org.distorted.library.effect");
-    int len = classes.length;
-
-    android.util.Log.e("Distorted", "Number of classes found: "+len);
-
-    for(int i=0; i<len; i++)
-      {
-      android.util.Log.e("Distorted", "Class found: "+classes[i]);
-      }
-
-
     mInitialized = true;
     }
 
diff --git a/src/main/java/org/distorted/library/EffectNames.java b/src/main/java/org/distorted/library/EffectNames.java
index 83ef78d..dbb9075 100644
--- a/src/main/java/org/distorted/library/EffectNames.java
+++ b/src/main/java/org/distorted/library/EffectNames.java
@@ -334,30 +334,6 @@ public enum EffectNames
     return names[ordinal];
     }
 
-///////////////////////////////////////////////////////////////////////////////////////////////////
-
-  static void fillWithUnities(int ordinal, float[] buffer, int index)
-    {
-    switch(unityDimensions[ordinal])
-      {
-      case 0: break;
-      case 1: buffer[index  ]=unities[MAXDIM*ordinal  ];
-              break;
-      case 2: buffer[index  ]=unities[MAXDIM*ordinal  ];
-              buffer[index+1]=unities[MAXDIM*ordinal+1];
-              break;
-      case 3: buffer[index  ]=unities[MAXDIM*ordinal  ];
-              buffer[index+1]=unities[MAXDIM*ordinal+1]; 
-              buffer[index+2]=unities[MAXDIM*ordinal+2];
-              break;
-      case 4: buffer[index  ]=unities[MAXDIM*ordinal  ];
-              buffer[index+1]=unities[MAXDIM*ordinal+1]; 
-              buffer[index+2]=unities[MAXDIM*ordinal+2];
-              buffer[index+3]=unities[MAXDIM*ordinal+3];
-              break;
-      }  
-    }
-  
 ///////////////////////////////////////////////////////////////////////////////////////////////////
   
   static boolean isUnity(int ordinal, float[] buffer, int index)
diff --git a/src/main/java/org/distorted/library/EffectQueueFragment.java b/src/main/java/org/distorted/library/EffectQueueFragment.java
index c91d522..e65677e 100644
--- a/src/main/java/org/distorted/library/EffectQueueFragment.java
+++ b/src/main/java/org/distorted/library/EffectQueueFragment.java
@@ -139,8 +139,6 @@ class EffectQueueFragment extends EffectQueue
     {
     if( mMax[INDEX]>mNumEffects )
       {
-      EffectNames.fillWithUnities(eln.ordinal(), mUniforms, NUM_UNIFORMS*mNumEffects); 
-
       if( data instanceof Dynamic1D)
         {
         mInter[0][mNumEffects] = (Dynamic1D)data;
@@ -171,8 +169,6 @@ class EffectQueueFragment extends EffectQueue
     {
     if( mMax[INDEX]>mNumEffects )
       {
-      EffectNames.fillWithUnities(eln.ordinal(), mUniforms, NUM_UNIFORMS*mNumEffects);
-
       if( data instanceof Dynamic1D)
         {
         mInter[0][mNumEffects] = (Dynamic1D)data;
@@ -213,8 +209,6 @@ class EffectQueueFragment extends EffectQueue
     {
     if( mMax[INDEX]>mNumEffects )
       {
-      EffectNames.fillWithUnities(eln.ordinal(), mUniforms, NUM_UNIFORMS*mNumEffects);
-
       if( level instanceof Dynamic1D)
         {
         mInter[0][mNumEffects] = (Dynamic1D)level;
@@ -266,8 +260,6 @@ class EffectQueueFragment extends EffectQueue
     {
     if( mMax[INDEX]>mNumEffects )
       {
-      EffectNames.fillWithUnities(eln.ordinal(), mUniforms, NUM_UNIFORMS*mNumEffects);
-
       if( level instanceof Dynamic1D)
         {
         mInter[0][mNumEffects] = (Dynamic1D)level;
diff --git a/src/main/java/org/distorted/library/EffectQueueVertex.java b/src/main/java/org/distorted/library/EffectQueueVertex.java
index e25acfd..3bbd17e 100644
--- a/src/main/java/org/distorted/library/EffectQueueVertex.java
+++ b/src/main/java/org/distorted/library/EffectQueueVertex.java
@@ -187,8 +187,6 @@ class EffectQueueVertex extends EffectQueue
     {
     if( mMax[INDEX]>mNumEffects )
       {
-      EffectNames.fillWithUnities(eln.ordinal(), mUniforms, NUM_UNIFORMS*mNumEffects);
-
       if( data instanceof Dynamic5D)
         {
         mInter[0][mNumEffects] = (Dynamic5D)data;
@@ -218,8 +216,6 @@ class EffectQueueVertex extends EffectQueue
     {
     if( mMax[INDEX]>mNumEffects )
       {
-      EffectNames.fillWithUnities(eln.ordinal(), mUniforms, NUM_UNIFORMS*mNumEffects);    
-
       if( data instanceof Dynamic3D)
         {
         mInter[0][mNumEffects] = (Dynamic3D)data;
@@ -247,8 +243,6 @@ class EffectQueueVertex extends EffectQueue
     {
     if( mMax[INDEX]>mNumEffects )
       {
-      EffectNames.fillWithUnities(eln.ordinal(), mUniforms, NUM_UNIFORMS*mNumEffects);
-
       if( data instanceof Dynamic1D)
         {
         mInter[0][mNumEffects] = (Dynamic1D)data;
@@ -272,8 +266,6 @@ class EffectQueueVertex extends EffectQueue
     {
     if( mMax[INDEX]>mNumEffects )
       {
-      EffectNames.fillWithUnities(eln.ordinal(), mUniforms, NUM_UNIFORMS*mNumEffects);
-
       if( data instanceof Dynamic1D)
         {
         mInter[0][mNumEffects] = (Dynamic1D)data;
@@ -297,8 +289,6 @@ class EffectQueueVertex extends EffectQueue
     {
     if( mMax[INDEX]>mNumEffects )
       {
-      EffectNames.fillWithUnities(eln.ordinal(), mUniforms, NUM_UNIFORMS*mNumEffects);
-
       if( data instanceof Dynamic2D)
         {
         mInter[0][mNumEffects] = (Dynamic2D)data;
@@ -323,8 +313,6 @@ class EffectQueueVertex extends EffectQueue
     {
     if( mMax[INDEX]>mNumEffects )
       {
-      EffectNames.fillWithUnities(eln.ordinal(), mUniforms, NUM_UNIFORMS*mNumEffects);
-
       if( data instanceof Dynamic2D)
         {
         mInter[0][mNumEffects] = (Dynamic2D)data;
diff --git a/src/main/java/org/distorted/library/effect/Effect.java b/src/main/java/org/distorted/library/effect/Effect.java
index c67d0a4..43c7798 100644
--- a/src/main/java/org/distorted/library/effect/Effect.java
+++ b/src/main/java/org/distorted/library/effect/Effect.java
@@ -21,158 +21,86 @@ package org.distorted.library.effect;
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
-import android.content.Context;
-
-import java.io.File;
-import java.io.IOException;
-import java.net.URL;
-import java.util.ArrayList;
-import java.util.Enumeration;
-import java.util.List;
-
-import dalvik.system.DexFile;
-
 public abstract class Effect
   {
-  long mID;
+  private final long mID;
+  private final int mType;
+  private final float[] mUnity;
+  private final int mDimension;
+  private final boolean mSupportsR;
+  private final boolean mSupportsC;
 
   private static long mNextID = 0;
-  static final int NUM_TYPES;
-  static int[] mMax;
-  static Class[] mDescendants;
 
-  static
-    {
-    try
-      {
-      mDescendants = getClasses("org.distorted.library.effect");
-      }
-    catch(ClassNotFoundException cnfe)
-      {
-      android.util.Log.e("Effect", "ClassNotFoundException: "+cnfe.getMessage());
-      }
-    catch(IOException ioe)
-      {
-      android.util.Log.e("Effect", "IOException: "+ioe.getMessage());
-      }
-
-    NUM_TYPES = mDescendants.length;
-    mMax = new int[NUM_TYPES];
-
-    android.util.Log.e("Effect", "Found "+NUM_TYPES+" descendant classes");
-    }
+  public static final int MATRIX      = 0;
+  public static final int VERTEX      = 1;
+  public static final int FRAGMENT    = 2;
+  public static final int POSTPROCESS = 3;
+
+  public static final int LENGTH = 4;           // The number of effect types above.
+  public static final int MASK= (1<<LENGTH)-1;  // Needed when we do bitwise operations on Effect Types.
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
-  public static String[] getClassesOfPackage(Context c, String packageName)
+  public static void onDestroy()
     {
-    ArrayList<String> classes = new ArrayList<>();
-
-    try
-      {
-      String packageCodePath = c.getPackageCodePath();
-      DexFile df = new DexFile(packageCodePath);
-
-      for (Enumeration<String> iter = df.entries(); iter.hasMoreElements(); )
-        {
-        String className = iter.nextElement();
-        if (className.contains(packageName))
-          {
-          classes.add(className.substring(className.lastIndexOf(".") + 1, className.length()));
-          }
-
-        android.util.Log.e("Distorted", "searching: "+className);
-        }
-      }
-    catch (IOException e)
-      {
-      e.printStackTrace();
-      }
-
-    return classes.toArray(new String[classes.size()]);
+    mNextID = 0;
     }
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
-  private static Class[] getClasses(String packageName) throws ClassNotFoundException, IOException
+  public static void reset(int[] maxtable)
     {
-    ClassLoader classLoader = Thread.currentThread().getContextClassLoader();
-    assert classLoader != null;
-    String path = packageName.replace('.', '/');
-    Enumeration<URL> resources = classLoader.getResources(path);
-
-    android.util.Log.e("Effect", "resources: "+resources.toString());
-
-    List<File> dirs = new ArrayList<>();
-
-    while (resources.hasMoreElements())
-      {
-      URL resource = resources.nextElement();
-      dirs.add(new File(resource.getFile()));
-      }
-
-    android.util.Log.e("Effect", "Num of dirs: "+dirs.size());
+    maxtable[0] = MatrixEffect.MAX;
+    maxtable[1] = VertexEffect.MAX;
+    maxtable[2] = FragmentEffect.MAX;
+    maxtable[3] = PostprocessEffect.MAX;
+    }
 
-    ArrayList<Class> classes = new ArrayList<>();
+///////////////////////////////////////////////////////////////////////////////////////////////////
 
-    for (File directory : dirs)
-      {
-      android.util.Log.e("Effect", "Searching in "+directory.getName());
+  public int getType()
+    {
+    return mType;
+    }
 
-      classes.addAll(findClasses(directory, packageName));
-      }
+///////////////////////////////////////////////////////////////////////////////////////////////////
 
-    return classes.toArray(new Class[classes.size()]);
+  public long getID()
+    {
+    return mID;
     }
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
-  private static List<Class> findClasses(File directory, String packageName) throws ClassNotFoundException
+  public boolean supportsCenter()
     {
-    List<Class> classes = new ArrayList<>();
-
-    if (!directory.exists())
-      {
-      return classes;
-      }
-
-    File[] files = directory.listFiles();
-
-    for (File file : files)
-      {
-      if (file.isDirectory())
-        {
-        assert !file.getName().contains(".");
-        classes.addAll(findClasses(file, packageName + "." + file.getName()));
-        }
-      else if (file.getName().endsWith(".class"))
-        {
-        classes.add(Class.forName(packageName + '.' + file.getName().substring(0, file.getName().length() - 6)));
-        }
-      }
-
-    return classes;
+    return mSupportsC;
     }
 
-
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
-  public static void onDestroy()
+  public boolean supportsRegion()
     {
-    mNextID = 0;
+    return mSupportsR;
     }
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
-  public static void reset()
+  public int getDimension()
     {
-    mNextID = 1;
+    return mDimension;
     }
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
-  Effect()
+  Effect(int type, float[] unity, int dimension, boolean center, boolean region)
     {
-    mID = mNextID++;
+    mID        = mNextID++;
+    mType      = type;
+    mUnity     = unity;
+    mDimension = dimension;
+    mSupportsC = center;
+    mSupportsR = region;
     }
   }
diff --git a/src/main/java/org/distorted/library/effect/FragmentEffect.java b/src/main/java/org/distorted/library/effect/FragmentEffect.java
index cf9f821..e1623c1 100644
--- a/src/main/java/org/distorted/library/effect/FragmentEffect.java
+++ b/src/main/java/org/distorted/library/effect/FragmentEffect.java
@@ -23,5 +23,12 @@ package org.distorted.library.effect;
 
 public abstract class FragmentEffect extends Effect
   {
-  
+  static final int MAX = 5;
+
+///////////////////////////////////////////////////////////////////////////////////////////////////
+
+  public FragmentEffect(float[] unity, int dimension, boolean center, boolean region)
+    {
+    super(FRAGMENT,unity,dimension,center,region);
+    }
   }
\ No newline at end of file
diff --git a/src/main/java/org/distorted/library/effect/MatrixEffect.java b/src/main/java/org/distorted/library/effect/MatrixEffect.java
index b366cc4..88115d1 100644
--- a/src/main/java/org/distorted/library/effect/MatrixEffect.java
+++ b/src/main/java/org/distorted/library/effect/MatrixEffect.java
@@ -23,7 +23,12 @@ package org.distorted.library.effect;
 
 public abstract class MatrixEffect extends Effect
   {
-  static int mMax;
+  static final int MAX = 10;
 
+///////////////////////////////////////////////////////////////////////////////////////////////////
 
+  public MatrixEffect(float[] unity, int dimension, boolean center, boolean region)
+    {
+    super(MATRIX,unity,dimension,center,region);
+    }
   }
diff --git a/src/main/java/org/distorted/library/effect/PostprocessEffect.java b/src/main/java/org/distorted/library/effect/PostprocessEffect.java
index 1ff1708..e0be7b1 100644
--- a/src/main/java/org/distorted/library/effect/PostprocessEffect.java
+++ b/src/main/java/org/distorted/library/effect/PostprocessEffect.java
@@ -23,5 +23,12 @@ package org.distorted.library.effect;
 
 public abstract class PostprocessEffect extends Effect
   {
-  
+  static final int MAX = 5;
+
+///////////////////////////////////////////////////////////////////////////////////////////////////
+
+  public PostprocessEffect(float[] unity, int dimension, boolean center, boolean region)
+    {
+    super(POSTPROCESS,unity,dimension,center,region);
+    }
   }
\ No newline at end of file
diff --git a/src/main/java/org/distorted/library/effect/VertexEffect.java b/src/main/java/org/distorted/library/effect/VertexEffect.java
index 5e45a85..4c5b3de 100644
--- a/src/main/java/org/distorted/library/effect/VertexEffect.java
+++ b/src/main/java/org/distorted/library/effect/VertexEffect.java
@@ -23,5 +23,12 @@ package org.distorted.library.effect;
 
 public abstract class VertexEffect extends Effect
   {
-  
+  static final int MAX = 5;
+
+///////////////////////////////////////////////////////////////////////////////////////////////////
+
+  public VertexEffect(float[] unity, int dimension, boolean center, boolean region)
+    {
+    super(VERTEX,unity,dimension,center,region);
+    }
   }
\ No newline at end of file
