Project

General

Profile

« Previous | Next » 

Revision 6bb59aad

Added by Leszek Koltunski over 7 years ago

Progress with support for Effect classes.

View differences:

src/main/java/org/distorted/library/effect/Effect.java
29 29
  private final int mDimension;
30 30
  private final boolean mSupportsR;
31 31
  private final boolean mSupportsC;
32
  private final String mStr;
32 33

  
33 34
  private static long mNextID = 0;
34 35

  
......
39 40

  
40 41
  public static final int LENGTH = 4;           // The number of effect types above.
41 42
  public static final int MASK= (1<<LENGTH)-1;  // Needed when we do bitwise operations on Effect Types.
43
  static final int MAX_EFFECTS = 1000;          // The can be no more than MAX_EFFECTS effects of a given type.
42 44

  
43 45
///////////////////////////////////////////////////////////////////////////////////////////////////
44 46

  
......
61 63
    maxtable[3] = PostprocessEffect.MAX;
62 64
    }
63 65

  
66
///////////////////////////////////////////////////////////////////////////////////////////////////
67

  
68
  public static int getType(int name)
69
    {
70
    return name/MAX_EFFECTS;
71
    }
72

  
64 73
///////////////////////////////////////////////////////////////////////////////////////////////////
65 74

  
66 75
  public int getType()
......
82 91
    return mID;
83 92
    }
84 93

  
94
///////////////////////////////////////////////////////////////////////////////////////////////////
95

  
96
  public String getString()
97
    {
98
    return mStr;
99
    }
100

  
85 101
///////////////////////////////////////////////////////////////////////////////////////////////////
86 102

  
87 103
  public boolean supportsCenter()
......
105 121

  
106 122
///////////////////////////////////////////////////////////////////////////////////////////////////
107 123

  
108
  Effect(int type, int name, int dimension, boolean center, boolean region)
124
  Effect(int type, int name, int dimension, boolean center, boolean region, final String str)
109 125
    {
110 126
    mID        = mNextID++;
111 127

  
......
114 130
    mDimension = dimension;
115 131
    mSupportsC = center;
116 132
    mSupportsR = region;
133
    mStr       = str;
117 134
    }
118 135
  }
src/main/java/org/distorted/library/effect/FragmentEffect.java
19 19

  
20 20
package org.distorted.library.effect;
21 21

  
22
import org.distorted.library.type.Data4D;
23 22
import org.distorted.library.type.Dynamic;
23
import org.distorted.library.type.Dynamic4D;
24 24
import org.distorted.library.type.Static;
25
import org.distorted.library.type.Static4D;
25 26

  
26 27
///////////////////////////////////////////////////////////////////////////////////////////////////
27 28
// FRAGMENT EFFECTS
......
31 32
  {
32 33
  public static final int NUM_UNIFORMS = 8;
33 34

  
34
  public static final int CHROMA            = 0;
35
  public static final int SMOOTH_CHROMA     = 1;
36
  public static final int ALPHA             = 2;
37
  public static final int SMOOTH_ALPHA      = 3;
38
  public static final int BRIGHTNESS        = 4;
39
  public static final int SMOOTH_BRIGHTNESS = 5;
40
  public static final int CONTRAST          = 6;
41
  public static final int SMOOTH_CONTRAST   = 7;
42
  public static final int SATURATION        = 8;
43
  public static final int SMOOTH_SATURATION = 9;
44
  public static final int NUM_EFFECTS       =10;
35
  public static final int CHROMA            = MAX_EFFECTS*FRAGMENT    ;
36
  public static final int SMOOTH_CHROMA     = MAX_EFFECTS*FRAGMENT + 1;
37
  public static final int ALPHA             = MAX_EFFECTS*FRAGMENT + 2;
38
  public static final int SMOOTH_ALPHA      = MAX_EFFECTS*FRAGMENT + 3;
39
  public static final int BRIGHTNESS        = MAX_EFFECTS*FRAGMENT + 4;
40
  public static final int SMOOTH_BRIGHTNESS = MAX_EFFECTS*FRAGMENT + 5;
41
  public static final int CONTRAST          = MAX_EFFECTS*FRAGMENT + 6;
42
  public static final int SMOOTH_CONTRAST   = MAX_EFFECTS*FRAGMENT + 7;
43
  public static final int SATURATION        = MAX_EFFECTS*FRAGMENT + 8;
44
  public static final int SMOOTH_SATURATION = MAX_EFFECTS*FRAGMENT + 9;
45
  public static final int NUM_EFFECTS       = 10;
45 46

  
46 47
  static final int MAX = 5;
47 48
  private static final int MAX_UNITY_DIM = 1;
48 49

  
49 50
  Dynamic mDynamic0, mDynamic1;
50 51
  Static mStatic0, mStatic1;
51
  Data4D mRegion;
52
  Dynamic4D mDynamicRegion;
53
  Static4D mStaticRegion;
52 54

  
53 55
  private final static float[] mUnity    = new float[MAX_UNITY_DIM*NUM_EFFECTS];
54 56
  private final static int[]   mUnityDim = new int[NUM_EFFECTS];
55 57

  
56 58
///////////////////////////////////////////////////////////////////////////////////////////////////
57 59

  
58
  public FragmentEffect(int name,float[] unity, int dimension, boolean center, boolean region)
60
  public FragmentEffect(int name,float[] unity, int dimension, boolean center, boolean region, final String str)
59 61
    {
60
    super(FRAGMENT,name,dimension,center,region);
62
    super(FRAGMENT,name,dimension,center,region,str);
61 63

  
62 64
    for(int i=0; i<unity.length; i++)
63 65
      {
src/main/java/org/distorted/library/effect/FragmentEffectAlpha.java
22 22
import org.distorted.library.type.Data1D;
23 23
import org.distorted.library.type.Data4D;
24 24
import org.distorted.library.type.Dynamic1D;
25
import org.distorted.library.type.Dynamic4D;
25 26
import org.distorted.library.type.Static1D;
27
import org.distorted.library.type.Static4D;
26 28

  
27 29
///////////////////////////////////////////////////////////////////////////////////////////////////
28 30

  
29 31
public class FragmentEffectAlpha extends FragmentEffect
30 32
  {
33
  private static final String NAME = "ALPHA";
31 34
  private static final float[] UNITIES = new float[] {1.0f};
32 35
  private static final int DIMENSION = 1;
33 36
  private static final boolean SUPPORTS_CENTER = false;
34 37
  private static final boolean SUPPORTS_REGION = true;
35 38

  
36 39
///////////////////////////////////////////////////////////////////////////////////////////////////
37

  
40
/**
41
 * Makes a certain sub-region of the Object smoothly change its transparency level.
42
 *
43
 * @param alpha  1-dimensional Data that returns the level of transparency we want to have at any given
44
 *               moment: pixel.a *= alpha.
45
 *               Valid range: <0,1>
46
 * @param region Region this Effect is limited to.
47
 * @param smooth If true, the level of 'alpha' will smoothly fade out towards the edges of the region.
48
 */
38 49
  public FragmentEffectAlpha(Data1D alpha, Data4D region, boolean smooth)
39 50
    {
40
    super(smooth?SMOOTH_ALPHA:ALPHA ,UNITIES,DIMENSION,SUPPORTS_CENTER,SUPPORTS_REGION);
51
    super(smooth?SMOOTH_ALPHA:ALPHA ,UNITIES,DIMENSION,SUPPORTS_CENTER,SUPPORTS_REGION,NAME);
41 52

  
42 53
    if( alpha instanceof Dynamic1D )
43 54
      {
......
48 59
      mStatic0 = (Static1D)alpha;
49 60
      }
50 61

  
51
    mRegion = region;
62
    if( region instanceof Static4D)
63
      {
64
      mStaticRegion = (Static4D)region;
65
      }
66
    else if( region instanceof Dynamic4D)
67
      {
68
      mDynamicRegion = (Dynamic4D)region;
69
      }
52 70
    }
53 71

  
54 72
///////////////////////////////////////////////////////////////////////////////////////////////////
55

  
73
/**
74
 * Makes the whole Object smoothly change its transparency level.
75
 *
76
 * @param alpha  1-dimensional Data that returns the level of transparency we want to have at any
77
 *               given moment: pixel.a *= alpha.
78
 *               Valid range: <0,1>
79
 */
56 80
  public FragmentEffectAlpha(Data1D alpha)
57 81
    {
58
    super(ALPHA,UNITIES,DIMENSION,SUPPORTS_CENTER,SUPPORTS_REGION);
82
    super(ALPHA,UNITIES,DIMENSION,SUPPORTS_CENTER,SUPPORTS_REGION,NAME);
59 83

  
60 84
    if( alpha instanceof Dynamic1D )
61 85
      {
......
65 89
      {
66 90
      mStatic0 = (Static1D)alpha;
67 91
      }
92

  
93
    mStaticRegion = new Static4D(0,0,Float.MAX_VALUE, Float.MAX_VALUE);
68 94
    }
69 95

  
70 96
///////////////////////////////////////////////////////////////////////////////////////////////////
71 97

  
72 98
  public boolean compute(float[] uniforms, int index, long currentDuration, long step )
73 99
    {
100
    if( mDynamicRegion!=null )
101
      {
102
      mDynamicRegion.interpolateMain(uniforms,index+4,currentDuration,step);
103
      }
104
    else
105
      {
106
      uniforms[index+4] = mStaticRegion.getX();
107
      uniforms[index+5] = mStaticRegion.getY();
108
      uniforms[index+6] = mStaticRegion.getZ();
109
      uniforms[index+7] = mStaticRegion.getW();
110
      }
111

  
74 112
    if( mDynamic0!=null )
75 113
      {
76 114
      return mDynamic0.interpolateMain(uniforms,index,currentDuration,step);
src/main/java/org/distorted/library/effect/FragmentEffectBrightness.java
22 22
import org.distorted.library.type.Data1D;
23 23
import org.distorted.library.type.Data4D;
24 24
import org.distorted.library.type.Dynamic1D;
25
import org.distorted.library.type.Dynamic4D;
25 26
import org.distorted.library.type.Static1D;
27
import org.distorted.library.type.Static4D;
26 28

  
27 29
///////////////////////////////////////////////////////////////////////////////////////////////////
28 30

  
29 31
public class FragmentEffectBrightness extends FragmentEffect
30 32
  {
33
  private static final String NAME = "BRIGHTNESS";
31 34
  private static final float[] UNITIES = new float[] {1.0f};
32 35
  private static final int DIMENSION = 1;
33 36
  private static final boolean SUPPORTS_CENTER = false;
34 37
  private static final boolean SUPPORTS_REGION = true;
35 38

  
36 39
///////////////////////////////////////////////////////////////////////////////////////////////////
37

  
40
/**
41
 * Makes a certain sub-region of the Object smoothly change its brightness level.
42
 *
43
 * @param brightness 1-dimensional Data that returns the level of brightness we want to have
44
 *                   at any given moment. Valid range: <0,infinity)
45
 * @param region     Region this Effect is limited to.
46
 * @param smooth     If true, the level of 'brightness' will smoothly fade out towards the edges of the region.
47
 */
38 48
  public FragmentEffectBrightness(Data1D brightness, Data4D region, boolean smooth)
39 49
    {
40
    super(smooth?SMOOTH_BRIGHTNESS:BRIGHTNESS ,UNITIES,DIMENSION,SUPPORTS_CENTER,SUPPORTS_REGION);
50
    super(smooth?SMOOTH_BRIGHTNESS:BRIGHTNESS ,UNITIES,DIMENSION,SUPPORTS_CENTER,SUPPORTS_REGION,NAME);
41 51

  
42 52
    if( brightness instanceof Dynamic1D )
43 53
      {
......
48 58
      mStatic0 = (Static1D)brightness;
49 59
      }
50 60

  
51
    mRegion = region;
61
    if( region instanceof Static4D)
62
      {
63
      mStaticRegion = (Static4D)region;
64
      }
65
    else if( region instanceof Dynamic4D)
66
      {
67
      mDynamicRegion = (Dynamic4D)region;
68
      }
52 69
    }
53 70

  
54 71
///////////////////////////////////////////////////////////////////////////////////////////////////
55

  
72
/**
73
 * Makes the whole Object smoothly change its brightness level.
74
 *
75
 * @param brightness 1-dimensional Data that returns the level of brightness we want to have
76
 *                   at any given moment. Valid range: <0,infinity)
77
 */
56 78
  public FragmentEffectBrightness(Data1D brightness)
57 79
    {
58
    super(BRIGHTNESS,UNITIES,DIMENSION,SUPPORTS_CENTER,SUPPORTS_REGION);
80
    super(BRIGHTNESS,UNITIES,DIMENSION,SUPPORTS_CENTER,SUPPORTS_REGION,NAME);
59 81

  
60 82
    if( brightness instanceof Dynamic1D )
61 83
      {
......
65 87
      {
66 88
      mStatic0 = (Static1D)brightness;
67 89
      }
90

  
91
    mStaticRegion = new Static4D(0,0,Float.MAX_VALUE, Float.MAX_VALUE);
68 92
    }
69 93

  
70 94
///////////////////////////////////////////////////////////////////////////////////////////////////
71 95

  
72 96
  public boolean compute(float[] uniforms, int index, long currentDuration, long step )
73 97
    {
98
    if( mDynamicRegion!=null )
99
      {
100
      mDynamicRegion.interpolateMain(uniforms,index+4,currentDuration,step);
101
      }
102
    else
103
      {
104
      uniforms[index+4] = mStaticRegion.getX();
105
      uniforms[index+5] = mStaticRegion.getY();
106
      uniforms[index+6] = mStaticRegion.getZ();
107
      uniforms[index+7] = mStaticRegion.getW();
108
      }
109

  
74 110
    if( mDynamic0!=null )
75 111
      {
76 112
      return mDynamic0.interpolateMain(uniforms,index,currentDuration,step);
src/main/java/org/distorted/library/effect/FragmentEffectChroma.java
24 24
import org.distorted.library.type.Data4D;
25 25
import org.distorted.library.type.Dynamic1D;
26 26
import org.distorted.library.type.Dynamic3D;
27
import org.distorted.library.type.Dynamic4D;
27 28
import org.distorted.library.type.Static1D;
28 29
import org.distorted.library.type.Static3D;
30
import org.distorted.library.type.Static4D;
29 31

  
30 32
///////////////////////////////////////////////////////////////////////////////////////////////////
31 33

  
32 34
public class FragmentEffectChroma extends FragmentEffect
33 35
  {
36
  private static final String NAME = "CHROMA";
34 37
  private static final float[] UNITIES = new float[] {0.0f};
35 38
  private static final int DIMENSION = 4;
36 39
  private static final boolean SUPPORTS_CENTER = false;
37 40
  private static final boolean SUPPORTS_REGION = true;
38 41

  
39 42
///////////////////////////////////////////////////////////////////////////////////////////////////
40

  
43
/**
44
 * Makes a certain sub-region of the Object smoothly change all three of its RGB components.
45
 *
46
 * @param blend  1-dimensional Data that returns the level of blend a given pixel will be
47
 *               mixed with the next parameter 'color': pixel = (1-level)*pixel + level*color.
48
 *               Valid range: <0,1>
49
 * @param color  Color to mix. (1,0,0) is RED.
50
 * @param region Region this Effect is limited to.
51
 * @param smooth If true, the level of 'blend' will smoothly fade out towards the edges of the region.
52
 */
41 53
  public FragmentEffectChroma(Data1D blend, Data3D color, Data4D region, boolean smooth)
42 54
    {
43
    super(smooth?SMOOTH_CHROMA:CHROMA ,UNITIES,DIMENSION,SUPPORTS_CENTER,SUPPORTS_REGION);
55
    super(smooth?SMOOTH_CHROMA:CHROMA ,UNITIES,DIMENSION,SUPPORTS_CENTER,SUPPORTS_REGION,NAME);
44 56

  
45 57
    if( blend instanceof Dynamic1D )
46 58
      {
......
60 72
      mStatic1 = (Static3D)color;
61 73
      }
62 74

  
63
    mRegion = region;
75
    if( region instanceof Static4D)
76
      {
77
      mStaticRegion = (Static4D)region;
78
      }
79
    else if( region instanceof Dynamic4D)
80
      {
81
      mDynamicRegion = (Dynamic4D)region;
82
      }
64 83
    }
65 84

  
66 85
///////////////////////////////////////////////////////////////////////////////////////////////////
67

  
86
/**
87
 * Makes the whole Object smoothly change all three of its RGB components.
88
 *
89
 * @param blend  1-dimensional Data that returns the level of blend a given pixel will be
90
 *               mixed with the next parameter 'color': pixel = (1-level)*pixel + level*color.
91
 *               Valid range: <0,1>
92
 * @param color  Color to mix. (1,0,0) is RED.
93
 */
68 94
  public FragmentEffectChroma(Data1D blend, Data3D color)
69 95
    {
70
    super(CHROMA,UNITIES,DIMENSION,SUPPORTS_CENTER,SUPPORTS_REGION);
96
    super(CHROMA,UNITIES,DIMENSION,SUPPORTS_CENTER,SUPPORTS_REGION,NAME);
71 97

  
72 98
    if( blend instanceof Dynamic1D )
73 99
      {
......
86 112
      {
87 113
      mStatic1 = (Static3D)color;
88 114
      }
115

  
116
    mStaticRegion = new Static4D(0,0,Float.MAX_VALUE, Float.MAX_VALUE);
89 117
    }
90 118

  
91 119
///////////////////////////////////////////////////////////////////////////////////////////////////
92 120

  
93 121
  public boolean compute(float[] uniforms, int index, long currentDuration, long step )
94 122
    {
123
    if( mDynamicRegion!=null )
124
      {
125
      mDynamicRegion.interpolateMain(uniforms,index+4,currentDuration,step);
126
      }
127
    else
128
      {
129
      uniforms[index+4] = mStaticRegion.getX();
130
      uniforms[index+5] = mStaticRegion.getY();
131
      uniforms[index+6] = mStaticRegion.getZ();
132
      uniforms[index+7] = mStaticRegion.getW();
133
      }
134

  
95 135
    if( mDynamic1!=null )
96 136
      {
97 137
      mDynamic1.interpolateMain(uniforms,index+1,currentDuration,step);
src/main/java/org/distorted/library/effect/FragmentEffectContrast.java
22 22
import org.distorted.library.type.Data1D;
23 23
import org.distorted.library.type.Data4D;
24 24
import org.distorted.library.type.Dynamic1D;
25
import org.distorted.library.type.Dynamic4D;
25 26
import org.distorted.library.type.Static1D;
27
import org.distorted.library.type.Static4D;
26 28

  
27 29
///////////////////////////////////////////////////////////////////////////////////////////////////
28 30

  
29 31
public class FragmentEffectContrast extends FragmentEffect
30 32
  {
33
  private static final String NAME = "CONTRAST";
31 34
  private static final float[] UNITIES = new float[] {1.0f};
32 35
  private static final int DIMENSION = 1;
33 36
  private static final boolean SUPPORTS_CENTER = false;
34 37
  private static final boolean SUPPORTS_REGION = true;
35 38

  
36 39
///////////////////////////////////////////////////////////////////////////////////////////////////
37

  
40
/**
41
 * Makes a certain sub-region of the Object smoothly change its contrast level.
42
 *
43
 * @param contrast 1-dimensional Data that returns the level of contrast we want to have
44
 *                 at any given moment. Valid range: <0,infinity)
45
 * @param region   Region this Effect is limited to.
46
 * @param smooth   If true, the level of 'contrast' will smoothly fade out towards the edges of the region.
47
 */
38 48
  public FragmentEffectContrast(Data1D contrast, Data4D region, boolean smooth)
39 49
    {
40
    super(smooth?SMOOTH_CONTRAST:CONTRAST ,UNITIES,DIMENSION,SUPPORTS_CENTER,SUPPORTS_REGION);
50
    super(smooth?SMOOTH_CONTRAST:CONTRAST ,UNITIES,DIMENSION,SUPPORTS_CENTER,SUPPORTS_REGION,NAME);
41 51

  
42 52
    if( contrast instanceof Dynamic1D )
43 53
      {
......
48 58
      mStatic0 = (Static1D)contrast;
49 59
      }
50 60

  
51
    mRegion = region;
61
    if( region instanceof Static4D)
62
      {
63
      mStaticRegion = (Static4D)region;
64
      }
65
    else if( region instanceof Dynamic4D)
66
      {
67
      mDynamicRegion = (Dynamic4D)region;
68
      }
52 69
    }
53 70

  
54 71
///////////////////////////////////////////////////////////////////////////////////////////////////
55

  
72
/**
73
 * Makes the whole Object smoothly change its contrast level.
74
 *
75
 * @param contrast 1-dimensional Data that returns the level of contrast we want to have
76
 *                 at any given moment. Valid range: <0,infinity)
77
 */
56 78
  public FragmentEffectContrast(Data1D contrast)
57 79
    {
58
    super(CONTRAST,UNITIES,DIMENSION,SUPPORTS_CENTER,SUPPORTS_REGION);
80
    super(CONTRAST,UNITIES,DIMENSION,SUPPORTS_CENTER,SUPPORTS_REGION,NAME);
59 81

  
60 82
    if( contrast instanceof Dynamic1D )
61 83
      {
......
65 87
      {
66 88
      mStatic0 = (Static1D)contrast;
67 89
      }
90

  
91
    mStaticRegion = new Static4D(0,0,Float.MAX_VALUE, Float.MAX_VALUE);
68 92
    }
69 93

  
70 94
///////////////////////////////////////////////////////////////////////////////////////////////////
71 95

  
72 96
  public boolean compute(float[] uniforms, int index, long currentDuration, long step )
73 97
    {
98
    if( mDynamicRegion!=null )
99
      {
100
      mDynamicRegion.interpolateMain(uniforms,index+4,currentDuration,step);
101
      }
102
    else
103
      {
104
      uniforms[index+4] = mStaticRegion.getX();
105
      uniforms[index+5] = mStaticRegion.getY();
106
      uniforms[index+6] = mStaticRegion.getZ();
107
      uniforms[index+7] = mStaticRegion.getW();
108
      }
109

  
74 110
    if( mDynamic0!=null )
75 111
      {
76 112
      return mDynamic0.interpolateMain(uniforms,index,currentDuration,step);
src/main/java/org/distorted/library/effect/FragmentEffectSaturation.java
22 22
import org.distorted.library.type.Data1D;
23 23
import org.distorted.library.type.Data4D;
24 24
import org.distorted.library.type.Dynamic1D;
25
import org.distorted.library.type.Dynamic4D;
25 26
import org.distorted.library.type.Static1D;
27
import org.distorted.library.type.Static4D;
26 28

  
27 29
///////////////////////////////////////////////////////////////////////////////////////////////////
28 30

  
29 31
public class FragmentEffectSaturation extends FragmentEffect
30 32
  {
33
  private static final String NAME = "SATURATION";
31 34
  private static final float[] UNITIES = new float[] {1.0f};
32 35
  private static final int DIMENSION = 1;
33 36
  private static final boolean SUPPORTS_CENTER = false;
34 37
  private static final boolean SUPPORTS_REGION = true;
35 38

  
36 39
///////////////////////////////////////////////////////////////////////////////////////////////////
37

  
40
/**
41
 * Makes a certain sub-region of the Object smoothly change its saturation level.
42
 *
43
 * @param saturation 1-dimensional Data that returns the level of saturation we want to have
44
 *                   at any given moment. Valid range: <0,infinity)
45
 * @param region     Region this Effect is limited to.
46
 * @param smooth     If true, the level of 'saturation' will smoothly fade out towards the edges of the region.
47
 */
38 48
  public FragmentEffectSaturation(Data1D saturation, Data4D region, boolean smooth)
39 49
    {
40
    super(smooth?SMOOTH_SATURATION:SATURATION ,UNITIES,DIMENSION,SUPPORTS_CENTER,SUPPORTS_REGION);
50
    super(smooth?SMOOTH_SATURATION:SATURATION ,UNITIES,DIMENSION,SUPPORTS_CENTER,SUPPORTS_REGION,NAME);
41 51

  
42 52
    if( saturation instanceof Dynamic1D )
43 53
      {
......
48 58
      mStatic0 = (Static1D)saturation;
49 59
      }
50 60

  
51
    mRegion = region;
61
    if( region instanceof Static4D)
62
      {
63
      mStaticRegion = (Static4D)region;
64
      }
65
    else if( region instanceof Dynamic4D)
66
      {
67
      mDynamicRegion = (Dynamic4D)region;
68
      }
52 69
    }
53 70

  
54 71
///////////////////////////////////////////////////////////////////////////////////////////////////
55

  
72
/**
73
 * Makes the whole Object smoothly change its saturation level.
74
 *
75
 * @param saturation 1-dimensional Data that returns the level of saturation we want to have
76
 *                   at any given moment. Valid range: <0,infinity)
77
 */
56 78
  public FragmentEffectSaturation(Data1D saturation)
57 79
    {
58
    super(SATURATION,UNITIES,DIMENSION,SUPPORTS_CENTER,SUPPORTS_REGION);
80
    super(SATURATION,UNITIES,DIMENSION,SUPPORTS_CENTER,SUPPORTS_REGION,NAME);
59 81

  
60 82
    if( saturation instanceof Dynamic1D )
61 83
      {
......
65 87
      {
66 88
      mStatic0 = (Static1D)saturation;
67 89
      }
90

  
91
    mStaticRegion = new Static4D(0,0,Float.MAX_VALUE, Float.MAX_VALUE);
68 92
    }
69 93

  
70 94
///////////////////////////////////////////////////////////////////////////////////////////////////
71 95

  
72 96
  public boolean compute(float[] uniforms, int index, long currentDuration, long step )
73 97
    {
98
    if( mDynamicRegion!=null )
99
      {
100
      mDynamicRegion.interpolateMain(uniforms,index+4,currentDuration,step);
101
      }
102
    else
103
      {
104
      uniforms[index+4] = mStaticRegion.getX();
105
      uniforms[index+5] = mStaticRegion.getY();
106
      uniforms[index+6] = mStaticRegion.getZ();
107
      uniforms[index+7] = mStaticRegion.getW();
108
      }
109

  
74 110
    if( mDynamic0!=null )
75 111
      {
76 112
      return mDynamic0.interpolateMain(uniforms,index,currentDuration,step);
src/main/java/org/distorted/library/effect/MatrixEffect.java
29 29
  {
30 30
  public static final int NUM_UNIFORMS = 7;
31 31

  
32
  public static final int MOVE       = 0;
33
  public static final int SCALE      = 1;
34
  public static final int ROTATE     = 2;
35
  public static final int QUATERNION = 3;
36
  public static final int SHEAR      = 4;
32
  public static final int MOVE       = MAX_EFFECTS*MATRIX    ;
33
  public static final int SCALE      = MAX_EFFECTS*MATRIX + 1;
34
  public static final int ROTATE     = MAX_EFFECTS*MATRIX + 2;
35
  public static final int QUATERNION = MAX_EFFECTS*MATRIX + 3;
36
  public static final int SHEAR      = MAX_EFFECTS*MATRIX + 4;
37 37
  public static final int NUM_EFFECTS= 5;
38 38

  
39 39
  static final int MAX = 5;
......
49 49

  
50 50
///////////////////////////////////////////////////////////////////////////////////////////////////
51 51

  
52
  public MatrixEffect(int name, float[] unity, int dimension, boolean center, boolean region)
52
  public MatrixEffect(int name, float[] unity, int dimension, boolean center, boolean region, final String str)
53 53
    {
54
    super(MATRIX,name,dimension,center,region);
54
    super(MATRIX,name,dimension,center,region,str);
55 55

  
56 56
    for(int i=0; i<unity.length; i++)
57 57
      {
src/main/java/org/distorted/library/effect/MatrixEffectMove.java
27 27

  
28 28
public class MatrixEffectMove extends MatrixEffect
29 29
  {
30
  private static final String NAME = "MOVE";
30 31
  private static final float[] UNITIES = new float[]{0.0f, 0.0f, 0.0f};
31 32
  private static final int DIMENSION = 3;
32 33
  private static final boolean SUPPORTS_CENTER = false;
33 34
  private static final boolean SUPPORTS_REGION = false;
34 35

  
35 36
///////////////////////////////////////////////////////////////////////////////////////////////////
36

  
37
/**
38
 * Moves the Object by a (possibly changing in time) vector.
39
 *
40
 * @param vector 3-dimensional Data which at any given time will return a Static3D
41
 *               representing the current coordinates of the vector we want to move the Object with.
42
 */
37 43
  public MatrixEffectMove(Data3D vector)
38 44
    {
39
    super(MOVE,UNITIES,DIMENSION,SUPPORTS_CENTER,SUPPORTS_REGION);
45
    super(MOVE,UNITIES,DIMENSION,SUPPORTS_CENTER,SUPPORTS_REGION,NAME);
40 46

  
41 47
    if( vector instanceof Static3D)
42 48
      {
src/main/java/org/distorted/library/effect/MatrixEffectQuaternion.java
30 30

  
31 31
public class MatrixEffectQuaternion extends MatrixEffect
32 32
  {
33
  private static final String NAME = "QUATERNION";
33 34
  private static final float[] UNITIES = new float[]{0.0f, 0.0f, 0.0f};
34 35
  private static final int DIMENSION = 4;
35 36
  private static final boolean SUPPORTS_CENTER = true;
36 37
  private static final boolean SUPPORTS_REGION = false;
37 38

  
38 39
///////////////////////////////////////////////////////////////////////////////////////////////////
39

  
40
/**
41
 * Rotates the Object by quaternion.
42
 *
43
 * @param quaternion The quaternion describing the rotation.
44
 * @param center     Coordinates of the Point we are rotating around.
45
 */
40 46
  public MatrixEffectQuaternion(Data4D quaternion, Data3D center )
41 47
    {
42
    super(QUATERNION,UNITIES,DIMENSION,SUPPORTS_CENTER,SUPPORTS_REGION);
48
    super(QUATERNION,UNITIES,DIMENSION,SUPPORTS_CENTER,SUPPORTS_REGION,NAME);
43 49

  
44 50
    if( quaternion instanceof Static4D)
45 51
      {
src/main/java/org/distorted/library/effect/MatrixEffectRotate.java
33 33

  
34 34
public class MatrixEffectRotate extends MatrixEffect
35 35
  {
36
  private static final String NAME = "ROTATE";
36 37
  private static final float[] UNITIES = new float[]{0.0f};
37 38
  private static final int DIMENSION = 4;
38 39
  private static final boolean SUPPORTS_CENTER = true;
39 40
  private static final boolean SUPPORTS_REGION = false;
40 41

  
41 42
///////////////////////////////////////////////////////////////////////////////////////////////////
42

  
43
/**
44
 * Rotates the Object by 'angle' degrees around the center.
45
 * Static axis of rotation is given by the last parameter.
46
 *
47
 * @param angle  Angle that we want to rotate the Object to. Unit: degrees
48
 * @param axis   Axis of rotation
49
 * @param center Coordinates of the Point we are rotating around.
50
 */
43 51
  public MatrixEffectRotate(Data1D angle, Static3D axis, Data3D center)
44 52
    {
45
    super(ROTATE,UNITIES,DIMENSION,SUPPORTS_CENTER,SUPPORTS_REGION);
53
    super(ROTATE,UNITIES,DIMENSION,SUPPORTS_CENTER,SUPPORTS_REGION,NAME);
46 54

  
47 55
    if( angle instanceof Static1D )
48 56
      {
......
66 74
    }
67 75

  
68 76
///////////////////////////////////////////////////////////////////////////////////////////////////
69

  
77
/**
78
 * Rotates the Object by 'angle' degrees around the center.
79
 * Here both angle and axis can dynamically change.
80
 *
81
 * @param angleaxis Combined 4-tuple representing the (angle,axisX,axisY,axisZ).
82
 * @param center    Coordinates of the Point we are rotating around.
83
 */
70 84
  public MatrixEffectRotate(Data4D angleaxis, Data3D center)
71 85
    {
72
    super(ROTATE,UNITIES,DIMENSION,SUPPORTS_CENTER,SUPPORTS_REGION);
86
    super(ROTATE,UNITIES,DIMENSION,SUPPORTS_CENTER,SUPPORTS_REGION,NAME);
73 87

  
74 88
    if( angleaxis instanceof Static4D)
75 89
      {
src/main/java/org/distorted/library/effect/MatrixEffectScale.java
27 27

  
28 28
public class MatrixEffectScale extends MatrixEffect
29 29
  {
30
  private static final String NAME = "SCALE";
30 31
  private static final float[] UNITIES = new float[] {1.0f,1.0f,1.0f};
31 32
  private static final int DIMENSION = 3;
32 33
  private static final boolean SUPPORTS_CENTER = false;
33 34
  private static final boolean SUPPORTS_REGION = false;
34 35

  
35 36
///////////////////////////////////////////////////////////////////////////////////////////////////
36

  
37
/**
38
 * Scales the Object by (possibly changing in time) 3D scale factors.
39
 *
40
 * @param scale 3-dimensional Data which at any given time returns a Static3D
41
 *              representing the current x- , y- and z- scale factors.
42
 */
37 43
  public MatrixEffectScale(Data3D scale)
38 44
    {
39
    super(SCALE,UNITIES,DIMENSION,SUPPORTS_CENTER,SUPPORTS_REGION);
45
    super(SCALE,UNITIES,DIMENSION,SUPPORTS_CENTER,SUPPORTS_REGION,NAME);
40 46

  
41 47
    if( scale instanceof Static3D)
42 48
      {
......
49 55
    }
50 56

  
51 57
///////////////////////////////////////////////////////////////////////////////////////////////////
52

  
58
/**
59
 * Scales the Object by (possibly changing in time) 3D scale factors.
60
 *
61
 * @param scale Common x,y, and z scale factor.
62
 */
53 63
  public MatrixEffectScale(float scale)
54 64
    {
55
    super(SCALE,UNITIES,DIMENSION,SUPPORTS_CENTER,SUPPORTS_REGION);
65
    super(SCALE,UNITIES,DIMENSION,SUPPORTS_CENTER,SUPPORTS_REGION,NAME);
56 66

  
57 67
    mStatic0 = new Static3D(scale,scale,scale);
58 68
    }
src/main/java/org/distorted/library/effect/MatrixEffectShear.java
27 27

  
28 28
public class MatrixEffectShear extends MatrixEffect
29 29
  {
30
  private static final String NAME = "SHEAR";
30 31
  private static final float[] UNITIES = new float[] {0.0f,0.0f,0.0f};
31 32
  private static final int DIMENSION = 3;
32 33
  private static final boolean SUPPORTS_CENTER = true;
33 34
  private static final boolean SUPPORTS_REGION = false;
34 35

  
35 36
///////////////////////////////////////////////////////////////////////////////////////////////////
36

  
37
/**
38
 * Shears the Object.
39
 *
40
 * @param shear   The 3-tuple of shear factors. The first controls level
41
 *                of shearing in the X-axis, second - Y-axis and the third -
42
 *                Z-axis. Each is the tangens of the shear angle, i.e 0 -
43
 *                no shear, 1 - shear by 45 degrees (tan(45deg)=1) etc.
44
 * @param center  Center of shearing, i.e. the point which stays unmoved.
45
 */
37 46
  public MatrixEffectShear(Data3D shear, Data3D center)
38 47
    {
39
    super(SHEAR,UNITIES,DIMENSION,SUPPORTS_CENTER,SUPPORTS_REGION);
48
    super(SHEAR,UNITIES,DIMENSION,SUPPORTS_CENTER,SUPPORTS_REGION,NAME);
40 49

  
41 50
    if( shear instanceof Static3D)
42 51
      {
src/main/java/org/distorted/library/effect/PostprocessEffect.java
30 30
  {
31 31
  public static final int NUM_UNIFORMS = 5;
32 32

  
33
  public static final int BLUR       =0;
34
  public static final int GLOW       =1;
35
  public static final int NUM_EFFECTS=2;
33
  public static final int BLUR       = MAX_EFFECTS*POSTPROCESS    ;
34
  public static final int GLOW       = MAX_EFFECTS*POSTPROCESS + 1;
35
  public static final int NUM_EFFECTS= 2;
36 36

  
37 37
  static final int MAX = 5;
38 38
  private static final int MAX_UNITY_DIM = 1;
......
45 45

  
46 46
///////////////////////////////////////////////////////////////////////////////////////////////////
47 47

  
48
  public PostprocessEffect(int name, float[] unity, int dimension, boolean center, boolean region)
48
  public PostprocessEffect(int name, float[] unity, int dimension, boolean center, boolean region, final String str)
49 49
    {
50
    super(POSTPROCESS,name,dimension,center,region);
50
    super(POSTPROCESS,name,dimension,center,region,str);
51 51

  
52 52
    for(int i=0; i<unity.length; i++)
53 53
      {
src/main/java/org/distorted/library/effect/PostprocessEffectBlur.java
27 27

  
28 28
public class PostprocessEffectBlur extends PostprocessEffect
29 29
  {
30
  private static final String NAME = "BLUR";
30 31
  private static final float[] UNITIES = new float[] {0.0f};
31 32
  private static final int DIMENSION = 1;
32 33
  private static final boolean SUPPORTS_CENTER = false;
......
36 37

  
37 38
  public PostprocessEffectBlur(Data1D radius)
38 39
    {
39
    super(BLUR,UNITIES,DIMENSION,SUPPORTS_CENTER,SUPPORTS_REGION);
40
    super(BLUR,UNITIES,DIMENSION,SUPPORTS_CENTER,SUPPORTS_REGION,NAME);
40 41

  
41 42
    if( radius instanceof Dynamic1D)
42 43
      {
src/main/java/org/distorted/library/effect/PostprocessEffectGlow.java
30 30

  
31 31
public class PostprocessEffectGlow extends PostprocessEffect
32 32
  {
33
  private static final String NAME = "GLOW";
33 34
  private static final float[] UNITIES = new float[] {0.0f};
34 35
  private static final int DIMENSION = 5;
35 36
  private static final boolean SUPPORTS_CENTER = false;
......
39 40

  
40 41
  public PostprocessEffectGlow(Data1D radius, Data4D color)
41 42
    {
42
    super(GLOW,UNITIES,DIMENSION,SUPPORTS_CENTER,SUPPORTS_REGION);
43
    super(GLOW,UNITIES,DIMENSION,SUPPORTS_CENTER,SUPPORTS_REGION,NAME);
43 44

  
44 45
    if( radius instanceof Dynamic1D)
45 46
      {
src/main/java/org/distorted/library/effect/VertexEffect.java
34 34
  {
35 35
  public static final int NUM_UNIFORMS = 12;
36 36

  
37
  public static final int DISTORT    =0;
38
  public static final int DEFORM     =1;
39
  public static final int SINK       =2;
40
  public static final int PINCH      =3;
41
  public static final int SWIRL      =4;
42
  public static final int WAVE       =5;
43
  public static final int NUM_EFFECTS=6;
37
  public static final int DISTORT    = MAX_EFFECTS*VERTEX    ;
38
  public static final int DEFORM     = MAX_EFFECTS*VERTEX + 1;
39
  public static final int SINK       = MAX_EFFECTS*VERTEX + 2;
40
  public static final int PINCH      = MAX_EFFECTS*VERTEX + 3;
41
  public static final int SWIRL      = MAX_EFFECTS*VERTEX + 4;
42
  public static final int WAVE       = MAX_EFFECTS*VERTEX + 5;
43
  public static final int NUM_EFFECTS= 6;
44 44

  
45 45
  static final int MAX = 5;
46 46
  private static final int MAX_UNITY_DIM = 3;
......
57 57

  
58 58
///////////////////////////////////////////////////////////////////////////////////////////////////
59 59

  
60
  public VertexEffect(int name, float[] unity, int dimension, boolean center, boolean region)
60
  public VertexEffect(int name, float[] unity, int dimension, boolean center, boolean region, final String str)
61 61
    {
62
    super(VERTEX,name,dimension,center,region);
62
    super(VERTEX,name,dimension,center,region,str);
63 63

  
64 64
    for(int i=0; i<unity.length; i++)
65 65
      {
src/main/java/org/distorted/library/effect/VertexEffectDeform.java
30 30

  
31 31
public class VertexEffectDeform extends VertexEffect
32 32
  {
33
  private static final String NAME = "DEFORM";
33 34
  private static final float[] UNITIES = new float[] {0.0f,0.0f,0.0f};
34 35
  private static final int DIMENSION = 3;
35 36
  private static final boolean SUPPORTS_CENTER = true;
36 37
  private static final boolean SUPPORTS_REGION = true;
37 38

  
38 39
///////////////////////////////////////////////////////////////////////////////////////////////////
39

  
40
/**
41
 * Deform the shape of the whole Object with a (possibly changing in time) vector of force applied to
42
 * a (possibly changing in time) point on the Object.
43
 *
44
 * @param vector Vector of force that deforms the shape of the whole Object.
45
 * @param center 3-dimensional Data that, at any given time, returns the Center of the Effect.
46
 * @param region Region that masks the Effect.
47
 */
40 48
  public VertexEffectDeform(Data3D vector, Data3D center, Data4D region)
41 49
    {
42
    super(DEFORM,UNITIES,DIMENSION,SUPPORTS_CENTER,SUPPORTS_REGION);
50
    super(DEFORM,UNITIES,DIMENSION,SUPPORTS_CENTER,SUPPORTS_REGION,NAME);
43 51

  
44 52
    if( vector instanceof Dynamic3D )
45 53
      {
......
70 78
    }
71 79

  
72 80
///////////////////////////////////////////////////////////////////////////////////////////////////
73

  
81
/**
82
 * Deform the shape of the whole Object with a (possibly changing in time) vector of force applied to
83
 * a (possibly changing in time) point on the Object.
84
 *
85
 * @param vector Vector of force that deforms the shape of the whole Object.
86
 * @param center 3-dimensional Data that, at any given time, returns the Center of the Effect.
87
 */
74 88
  public VertexEffectDeform(Data3D vector, Data3D center)
75 89
    {
76
    super(DEFORM,UNITIES,DIMENSION,SUPPORTS_CENTER,SUPPORTS_REGION);
90
    super(DEFORM,UNITIES,DIMENSION,SUPPORTS_CENTER,SUPPORTS_REGION,NAME);
77 91

  
78 92
    if( vector instanceof Dynamic3D )
79 93
      {
src/main/java/org/distorted/library/effect/VertexEffectDistort.java
30 30

  
31 31
public class VertexEffectDistort extends VertexEffect
32 32
  {
33
  private static final String NAME = "DISORT";
33 34
  private static final float[] UNITIES = new float[] {0.0f,0.0f,0.0f};
34 35
  private static final int DIMENSION = 3;
35 36
  private static final boolean SUPPORTS_CENTER = true;
36 37
  private static final boolean SUPPORTS_REGION = true;
37 38

  
38 39
///////////////////////////////////////////////////////////////////////////////////////////////////
39

  
40
/**
41
 * Distort a (possibly changing in time) part of the Object by a (possibly changing in time) vector of force.
42
 *
43
 * @param vector 3-dimensional Vector which represents the force the Center of the Effect is
44
 *               currently being dragged with.
45
 * @param center 3-dimensional Data that, at any given time, returns the Center of the Effect.
46
 * @param region Region that masks the Effect.
47
 */
40 48
  public VertexEffectDistort(Data3D vector, Data3D center, Data4D region)
41 49
    {
42
    super(DISTORT,UNITIES,DIMENSION,SUPPORTS_CENTER,SUPPORTS_REGION);
50
    super(DISTORT,UNITIES,DIMENSION,SUPPORTS_CENTER,SUPPORTS_REGION,NAME);
43 51

  
44 52
    if( vector instanceof Dynamic3D )
45 53
      {
......
70 78
    }
71 79

  
72 80
///////////////////////////////////////////////////////////////////////////////////////////////////
73

  
81
/**
82
 * Distort the whole Object by a (possibly changing in time) vector of force.
83
 *
84
 * @param vector 3-dimensional Vector which represents the force the Center of the Effect is
85
 *               currently being dragged with.
86
 * @param center 3-dimensional Data that, at any given time, returns the Center of the Effect.
87
 */
74 88
  public VertexEffectDistort(Data3D vector, Data3D center)
75 89
    {
76
    super(DISTORT,UNITIES,DIMENSION,SUPPORTS_CENTER,SUPPORTS_REGION);
90
    super(DISTORT,UNITIES,DIMENSION,SUPPORTS_CENTER,SUPPORTS_REGION,NAME);
77 91

  
78 92
    if( vector instanceof Dynamic3D )
79 93
      {
src/main/java/org/distorted/library/effect/VertexEffectPinch.java
33 33

  
34 34
public class VertexEffectPinch extends VertexEffect
35 35
  {
36
  private static final String NAME = "PINCH";
36 37
  private static final float[] UNITIES = new float[] {1.0f};
37 38
  private static final int DIMENSION = 2;
38 39
  private static final boolean SUPPORTS_CENTER = true;
39 40
  private static final boolean SUPPORTS_REGION = true;
40 41

  
41 42
///////////////////////////////////////////////////////////////////////////////////////////////////
42

  
43
/**
44
 * Pull all points around the center of the Effect towards a line passing through the center
45
 * (that's if degree>=1) or push them away from the line (degree<=1)
46
 *
47
 * @param pinch  The current degree of the Effect + angle the line forms with X-axis
48
 * @param center 3-dimensional Data that, at any given time, returns the Center of the Effect.
49
 * @param region Region that masks the Effect.
50
 */
43 51
  public VertexEffectPinch(Data2D pinch, Data3D center, Data4D region)
44 52
    {
45
    super(PINCH,UNITIES,DIMENSION,SUPPORTS_CENTER,SUPPORTS_REGION);
53
    super(PINCH,UNITIES,DIMENSION,SUPPORTS_CENTER,SUPPORTS_REGION,NAME);
46 54

  
47 55
    if( pinch instanceof Dynamic2D)
48 56
      {
......
73 81
    }
74 82

  
75 83
///////////////////////////////////////////////////////////////////////////////////////////////////
76

  
84
/**
85
 * Pull all points around the center of the Effect towards a line passing through the center
86
 * (that's if degree>=1) or push them away from the line (degree<=1)
87
 *
88
 * @param pinch  The current degree of the Effect + angle the line forms with X-axis
89
 * @param center 3-dimensional Data that, at any given time, returns the Center of the Effect.
90
 */
77 91
  public VertexEffectPinch(Data2D pinch, Data3D center)
78 92
    {
79
    super(PINCH,UNITIES,DIMENSION,SUPPORTS_CENTER,SUPPORTS_REGION);
93
    super(PINCH,UNITIES,DIMENSION,SUPPORTS_CENTER,SUPPORTS_REGION,NAME);
80 94

  
81 95
    if( pinch instanceof Dynamic2D)
82 96
      {
src/main/java/org/distorted/library/effect/VertexEffectSink.java
33 33

  
34 34
public class VertexEffectSink extends VertexEffect
35 35
  {
36
  private static final String NAME = "SINK";
36 37
  private static final float[] UNITIES = new float[] {1.0f};
37 38
  private static final int DIMENSION = 1;
38 39
  private static final boolean SUPPORTS_CENTER = true;
39 40
  private static final boolean SUPPORTS_REGION = true;
40 41

  
41 42
///////////////////////////////////////////////////////////////////////////////////////////////////
42

  
43
/**
44
 * Pull all points around the center of the Effect towards the center (if degree>=1) or push them
45
 * away from the center (degree<=1)
46
 *
47
 * @param sink   The current degree of the Effect.
48
 * @param center 3-dimensional Data that, at any given time, returns the Center of the Effect.
49
 * @param region Region that masks the Effect.
50
 */
43 51
  public VertexEffectSink(Data1D sink, Data3D center, Data4D region)
44 52
    {
45
    super(SINK,UNITIES,DIMENSION,SUPPORTS_CENTER,SUPPORTS_REGION);
53
    super(SINK,UNITIES,DIMENSION,SUPPORTS_CENTER,SUPPORTS_REGION,NAME);
46 54

  
47 55
    if( sink instanceof Dynamic1D)
48 56
      {
......
73 81
    }
74 82

  
75 83
///////////////////////////////////////////////////////////////////////////////////////////////////
76

  
84
/**
85
 * Pull all points around the center of the Effect towards the center (if degree>=1) or push them
86
 * away from the center (degree<=1)
87
 *
88
 * @param sink   The current degree of the Effect.
89
 * @param center 3-dimensional Data that, at any given time, returns the Center of the Effect.
90
 */
77 91
  public VertexEffectSink(Data1D sink, Data3D center)
78 92
    {
79
    super(SINK,UNITIES,DIMENSION,SUPPORTS_CENTER,SUPPORTS_REGION);
93
    super(SINK,UNITIES,DIMENSION,SUPPORTS_CENTER,SUPPORTS_REGION,NAME);
80 94

  
81 95
    if( sink instanceof Dynamic1D)
82 96
      {
src/main/java/org/distorted/library/effect/VertexEffectSwirl.java
33 33

  
34 34
public class VertexEffectSwirl extends VertexEffect
35 35
  {
36
  private static final String NAME = "SWIRL";
36 37
  private static final float[] UNITIES = new float[] {0.0f};
37 38
  private static final int DIMENSION = 1;
38 39
  private static final boolean SUPPORTS_CENTER = true;
39 40
  private static final boolean SUPPORTS_REGION = true;
40 41

  
41 42
///////////////////////////////////////////////////////////////////////////////////////////////////
42

  
43
/**
44
 * Rotate part of the Object around the Center of the Effect by a certain angle.
45
 *
46
 * @param swirl  The angle of Swirl (in degrees). Positive values swirl clockwise.
47
 * @param center 3-dimensional Data that, at any given time, returns the Center of the Effect.
48
 * @param region Region that masks the Effect.
49
 */
43 50
  public VertexEffectSwirl(Data1D swirl, Data3D center, Data4D region)
44 51
    {
45
    super(SWIRL,UNITIES,DIMENSION,SUPPORTS_CENTER,SUPPORTS_REGION);
52
    super(SWIRL,UNITIES,DIMENSION,SUPPORTS_CENTER,SUPPORTS_REGION,NAME);
46 53

  
47 54
    if( swirl instanceof Dynamic1D)
48 55
      {
......
73 80
    }
74 81

  
75 82
///////////////////////////////////////////////////////////////////////////////////////////////////
76

  
83
/**
84
 * Rotate the whole Object around the Center of the Effect by a certain angle.
85
 *
86
 * @param swirl  The angle of Swirl (in degrees). Positive values swirl clockwise.
87
 * @param center 3-dimensional Data that, at any given time, returns the Center of the Effect.
88
 */
77 89
  public VertexEffectSwirl(Data1D swirl, Data3D center)
78 90
    {
79
    super(SWIRL,UNITIES,DIMENSION,SUPPORTS_CENTER,SUPPORTS_REGION);
91
    super(SWIRL,UNITIES,DIMENSION,SUPPORTS_CENTER,SUPPORTS_REGION,NAME);
80 92

  
81 93
    if( swirl instanceof Dynamic1D)
82 94
      {
src/main/java/org/distorted/library/effect/VertexEffectWave.java
33 33

  
34 34
public class VertexEffectWave extends VertexEffect
35 35
  {
36
  private static final String NAME = "WAVE";
36 37
  private static final float[] UNITIES = new float[] {0.0f};
37 38
  private static final int DIMENSION = 5;
38 39
  private static final boolean SUPPORTS_CENTER = true;
39 40
  private static final boolean SUPPORTS_REGION = true;
40 41

  
41 42
///////////////////////////////////////////////////////////////////////////////////////////////////
42

  
43
  public VertexEffectWave(Data5D wave, Data3D center, Data4D region)
43
/**
44
 * Directional, sinusoidal wave effect.
45
 *
46
 * @param wave   A 5-dimensional data structure describing the wave: first member is the amplitude,
47
 *               second is the wave length, third is the phase (i.e. when phase = PI/2, the sine
48
 *               wave at the center does not start from sin(0), but from sin(PI/2) ) and the next two
49
 *               describe the 'direction' of the wave.
50
 *               <p>
51
 *               Wave direction is defined to be a 3D vector of length 1. To define such vectors, we
52
 *               need 2 floats: thus the third member is the angle Alpha (in degrees) which the vector
53
 *               forms with the XY-plane, and the fourth is the angle Beta (again in degrees) which
54
 *               the projection of the vector to the XY-plane forms with the Y-axis (counterclockwise).
55
 *               <p>
56
 *               <p>
57
 *               Example1: if Alpha = 90, Beta = 90, (then V=(0,0,1) ) and the wave acts 'vertically'
58
 *               in the X-direction, i.e. cross-sections of the resulting surface with the XZ-plane
59
 *               will be sine shapes.
60
 *               <p>
61
 *               Example2: if Alpha = 90, Beta = 0, the again V=(0,0,1) and the wave is 'vertical',
62
 *               but this time it waves in the Y-direction, i.e. cross sections of the surface and the
63
 *               YZ-plane with be sine shapes.
64
 *               <p>
65
 *               Example3: if Alpha = 0 and Beta = 45, then V=(sqrt(2)/2, -sqrt(2)/2, 0) and the wave
66
 *               is entirely 'horizontal' and moves point (x,y,0) in direction V by whatever is the
67
 *               value if sin at this point.
68
 * @param center 3-dimensional Data that, at any given time, returns the Center of the Effect.
69
 */
70
  public VertexEffectWave(Data5D wave, Data3D center)
44 71
    {
45
    super(WAVE,UNITIES,DIMENSION,SUPPORTS_CENTER,SUPPORTS_REGION);
72
    super(WAVE,UNITIES,DIMENSION,SUPPORTS_CENTER,SUPPORTS_REGION,NAME);
46 73

  
47 74
    if( wave instanceof Dynamic5D)
48 75
      {
......
57 84
      {
58 85
      mStaticCenter = (Static3D)center;
59 86
      }
60
    else if( center instanceof Dynamic3D)
87
    else if( center instanceof Dynamic3D )
61 88
      {
62 89
      mDynamicCenter = (Dynamic3D)center;
63 90
      }
64 91

  
65
    if( region instanceof Static4D)
66
      {
67
      mStaticRegion = (Static4D)region;
68
      }
69
    else if( region instanceof Dynamic4D)
70
      {
71
      mDynamicRegion = (Dynamic4D)region;
72
      }
92
    mStaticRegion = new Static4D(0,0,Float.MAX_VALUE, Float.MAX_VALUE);
73 93
    }
74 94

  
75 95
///////////////////////////////////////////////////////////////////////////////////////////////////
76

  
77
  public VertexEffectWave(Data5D wave, Data3D center)
96
/**
97
 * Directional, sinusoidal wave effect.
98
 *
99
 * @param wave   see {@link VertexEffectWave(Data5D,Data3D)}
100
 * @param center 3-dimensional Data that, at any given time, returns the Center of the Effect.
101
 * @param region Region that masks the Effect.
102
 */
103
  public VertexEffectWave(Data5D wave, Data3D center, Data4D region)
78 104
    {
79
    super(WAVE,UNITIES,DIMENSION,SUPPORTS_CENTER,SUPPORTS_REGION);
105
    super(WAVE,UNITIES,DIMENSION,SUPPORTS_CENTER,SUPPORTS_REGION,NAME);
80 106

  
81 107
    if( wave instanceof Dynamic5D)
82 108
      {
......
91 117
      {
92 118
      mStaticCenter = (Static3D)center;
93 119
      }
94
    else if( center instanceof Dynamic3D )
120
    else if( center instanceof Dynamic3D)
95 121
      {
96 122
      mDynamicCenter = (Dynamic3D)center;
97 123
      }
98 124

  
99
    mStaticRegion = new Static4D(0,0,Float.MAX_VALUE, Float.MAX_VALUE);
125
    if( region instanceof Static4D)
126
      {
127
      mStaticRegion = (Static4D)region;
128
      }
129
    else if( region instanceof Dynamic4D)
130
      {
131
      mDynamicRegion = (Dynamic4D)region;
132
      }
100 133
    }
101 134

  
102 135
///////////////////////////////////////////////////////////////////////////////////////////////////
src/main/java/org/distorted/library/main/DistortedEffects.java
31 31
import org.distorted.library.program.LinkingException;
32 32
import org.distorted.library.program.VertexCompilationException;
33 33
import org.distorted.library.program.VertexUniformsException;
34
import org.distorted.library.type.Data1D;
35
import org.distorted.library.type.Data2D;
36
import org.distorted.library.type.Data3D;
37
import org.distorted.library.type.Data4D;
38
import org.distorted.library.type.Data5D;
39
import org.distorted.library.type.Static3D;
40 34

  
41 35
import java.io.InputStream;
42 36
import java.nio.ByteBuffer;
43 37
import java.nio.ByteOrder;
44 38
import java.nio.FloatBuffer;
39
import java.util.ArrayList;
45 40

  
46 41
///////////////////////////////////////////////////////////////////////////////////////////////////
47 42
/**
......
55 50
  /// MAIN PROGRAM ///
56 51
  private static DistortedProgram mMainProgram;
57 52
  private static int mMainTextureH;
58
  private static boolean[] mEffectEnabled = new boolean[EffectNames.size()];
59

  
60
  static
61
    {
62
    int len = EffectNames.size();
63

  
64
    for(int i=0; i<len; i++)
65
      {
66
      mEffectEnabled[i] = false;
67
      }
68
    }
53
  private static ArrayList<Effect> mEnabledEffects = new ArrayList<>();
69 54

  
70 55
  /// BLIT PROGRAM ///
71 56
  private static DistortedProgram mBlitProgram;
......
112 97
    String mainVertHeader= Distorted.GLSL_VERSION;
113 98
    String mainFragHeader= Distorted.GLSL_VERSION;
114 99

  
115
    EffectNames name;
116
    EffectTypes type;
117 100
    boolean foundF = false;
118 101
    boolean foundV = false;
102
    int type, effects = mEnabledEffects.size();
103
    Effect effect;
119 104

  
120
    for(int i=0; i<mEffectEnabled.length; i++)
105
    for(int i=0; i<effects; i++)
121 106
      {
122
      if( mEffectEnabled[i] )
107
      effect = mEnabledEffects.remove(0);
108
      type   = effect.getType();
109

  
110
      if( type == Effect.VERTEX )
111
        {
112
        mainVertHeader += ("#define "+effect.getString()+" "+effect.getName()+"\n");
113
        foundV = true;
114
        }
115
      else if( type == Effect.FRAGMENT )
123 116
        {
124
        name = EffectNames.getName(i);
125
        type = EffectNames.getType(i);
126

  
127
        if( type == EffectTypes.VERTEX )
128
          {
129
          mainVertHeader += ("#define "+name.name()+" "+name.ordinal()+"\n");
130
          foundV = true;
131
          }
132
        else if( type == EffectTypes.FRAGMENT )
133
          {
134
          mainFragHeader += ("#define "+name.name()+" "+name.ordinal()+"\n");
135
          foundF = true;
136
          }
117
        mainFragHeader += ("#define "+effect.getString()+" "+effect.getName()+"\n");
118
        foundF = true;
137 119
        }
138 120
      }
139 121

  
......
357 339
  static void onDestroy()
358 340
    {
359 341
    mNextID = 0;
360

  
361
    int len = EffectNames.size();
362

  
363
    for(int i=0; i<len; i++)
364
      {
365
      mEffectEnabled[i] = false;
366
      }
367 342
    }
368 343

  
369 344
///////////////////////////////////////////////////////////////////////////////////////////////////
......
458 433
/**
459 434
 * Aborts all Effects of a given type, for example all MATRIX Effects.
460 435
 * 
461
 * @param type one of the constants defined in {@link EffectTypes}
436
 * @param type one of the constants defined in {@link Effect}
462 437
 * @return Number of effects aborted.
463 438
 */
464
  public int abortEffects(EffectTypes type)
439
  public int abortByType(int type)
465 440
    {
466 441
    switch(type)
467 442
      {
468
      case MATRIX     : return mM.abortAll(true);
469
      case VERTEX     : return mV.abortAll(true);
470
      case FRAGMENT   : return mF.abortAll(true);
471
      default         : return 0;
443
      case Effect.MATRIX     : return mM.abortAll(true);
444
      case Effect.VERTEX     : return mV.abortAll(true);
445
      case Effect.FRAGMENT   : return mF.abortAll(true);
446
  //  case Effect.POSTPROCESS: return mP.abortAll(true);
447
      default                : return 0;
472 448
      }
473 449
    }
474 450
    
......
476 452
/**
477 453
 * Aborts a single Effect.
478 454
 * 
479
 * @param id ID of the Effect we want to abort.
455
 * @param effect the Effect we want to abort.
480 456
 * @return number of Effects aborted. Always either 0 or 1.
481 457
 */
482
  public int abortEffect(long id)
458
  public int abortEffect(Effect effect)
483 459
    {
484
    int type = (int)(id&Effect.MASK);
485

  
486
    if( type==Effect.MATRIX   ) return mM.removeByID(id>>Effect.LENGTH);
487
    if( type==Effect.VERTEX   ) return mV.removeByID(id>>Effect.LENGTH);
488
    if( type==Effect.FRAGMENT ) return mF.removeByID(id>>Effect.LENGTH);
489

  
490
    return 0;
460
    switch(effect.getType())
461
      {
462
      case Effect.MATRIX     : return mM.removeEffect(effect);
463
      case Effect.VERTEX     : return mV.removeEffect(effect);
464
      case Effect.FRAGMENT   : return mF.removeEffect(effect);
465
  //  case Effect.POSTPROCESS: return mP.removeEffect(effect);
466
      default                : return 0;
467
      }
491 468
    }
492 469

  
493 470
///////////////////////////////////////////////////////////////////////////////////////////////////
494 471
/**
495 472
 * Abort all Effects of a given name, for example all rotations.
496 473
 * 
497
 * @param name one of the constants defined in {@link EffectNames}
474
 * @param name one of the constants defined in
475
 *             {@link org.distorted.library.effect.MatrixEffect},
476
 *             {@link org.distorted.library.effect.VertexEffect},
477
 *             {@link org.distorted.library.effect.FragmentEffect} or
478
 *             {@link org.distorted.library.effect.PostprocessEffect}
498 479
 * @return number of Effects aborted.
499 480
 */
500
  public int abortEffects(EffectNames name)
481
  public int abortByName(int name)
501 482
    {
502
    switch(name.getType())
483
    switch(Effect.getType(name))
503 484
      {
504
      case MATRIX     : return mM.removeByType(name);
505
      case VERTEX     : return mV.removeByType(name);
506
      case FRAGMENT   : return mF.removeByType(name);
507
      default         : return 0;
485
      case Effect.MATRIX     : return mM.removeByName(name);
486
      case Effect.VERTEX     : return mV.removeByName(name);
487
      case Effect.FRAGMENT   : return mF.removeByName(name);
488
  //  case Effect.POSTPROCESS: return mP.removeByName(name);
489
      default                : return 0;
508 490
      }
509 491
    }
510
    
511
///////////////////////////////////////////////////////////////////////////////////////////////////
512
/**
513
 * Print some info about a given Effect to Android's standard out. Used for debugging only.
514
 * 
515
 * @param id Effect ID we want to print info about
516
 * @return <code>true</code> if a single Effect of type effectType has been found.
517
 */
518
  @SuppressWarnings("unused")
519
  public boolean printEffect(long id)
520
    {
521
    int type = (int)(id&EffectTypes.MASK);
... This diff was truncated because it exceeds the maximum size that can be displayed.

Also available in: Unified diff