Project

General

Profile

Download (5.6 KB) Statistics
| Branch: | Revision:

library / src / main / java / org / distorted / library / effect / Effect.java @ 8e28b6ff

1 8eccf334 Leszek Koltunski
///////////////////////////////////////////////////////////////////////////////////////////////////
2
// Copyright 2017 Leszek Koltunski                                                               //
3
//                                                                                               //
4
// This file is part of Distorted.                                                               //
5
//                                                                                               //
6
// Distorted is free software: you can redistribute it and/or modify                             //
7
// it under the terms of the GNU General Public License as published by                          //
8
// the Free Software Foundation, either version 2 of the License, or                             //
9
// (at your option) any later version.                                                           //
10
//                                                                                               //
11
// Distorted is distributed in the hope that it will be useful,                                  //
12
// but WITHOUT ANY WARRANTY; without even the implied warranty of                                //
13
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the                                 //
14
// GNU General Public License for more details.                                                  //
15
//                                                                                               //
16
// You should have received a copy of the GNU General Public License                             //
17
// along with Distorted.  If not, see <http://www.gnu.org/licenses/>.                            //
18
///////////////////////////////////////////////////////////////////////////////////////////////////
19
20
package org.distorted.library.effect;
21
22
///////////////////////////////////////////////////////////////////////////////////////////////////
23
24
public abstract class Effect
25
  {
26 da9b3f07 Leszek Koltunski
  private final static int MAX_UNITY_DIM = 4;
27 c3651001 Leszek Koltunski
  private final static int NUM_EFFECTS = EffectName.LENGTH;
28 da9b3f07 Leszek Koltunski
29 b547aaba leszek
  private final long mID;
30 da9b3f07 Leszek Koltunski
  private final EffectType mType;
31
  private final EffectName mName;
32 b547aaba leszek
  private final int mDimension;
33
  private final boolean mSupportsR;
34
  private final boolean mSupportsC;
35 8eccf334 Leszek Koltunski
36
  private static long mNextID = 0;
37
38 da9b3f07 Leszek Koltunski
  private final static float[] mUnity= new float[MAX_UNITY_DIM*NUM_EFFECTS];
39
  private final static int[]   mUnityDim = new int[NUM_EFFECTS];
40 8eccf334 Leszek Koltunski
41 9af837e8 leszek
  static boolean[] mEnabled = new boolean[NUM_EFFECTS];
42
43
  static
44
    {
45
    for(int i=0; i<NUM_EFFECTS; i++) mEnabled[i] = false;
46
    }
47
48 15aa7d94 Leszek Koltunski
///////////////////////////////////////////////////////////////////////////////////////////////////
49
50
  public abstract boolean compute(float[] uniforms, int index, long currentDuration, long step );
51
52 8eccf334 Leszek Koltunski
///////////////////////////////////////////////////////////////////////////////////////////////////
53
54 b547aaba leszek
  public static void onDestroy()
55 8eccf334 Leszek Koltunski
    {
56 b547aaba leszek
    mNextID = 0;
57 9af837e8 leszek
58
    for(int i=0; i<NUM_EFFECTS; i++) mEnabled[i] = false;
59 8eccf334 Leszek Koltunski
    }
60
61
///////////////////////////////////////////////////////////////////////////////////////////////////
62
63 da9b3f07 Leszek Koltunski
  public boolean isUnity(float[] buffer, int index)
64 8eccf334 Leszek Koltunski
    {
65 da9b3f07 Leszek Koltunski
    int name = mName.ordinal();
66
67
    switch(mUnityDim[name])
68
      {
69
      case 0: return true;
70
      case 1: return buffer[index  ]==mUnity[MAX_UNITY_DIM*name  ];
71
      case 2: return buffer[index  ]==mUnity[MAX_UNITY_DIM*name  ] &&
72
                     buffer[index+1]==mUnity[MAX_UNITY_DIM*name+1];
73
      case 3: return buffer[index  ]==mUnity[MAX_UNITY_DIM*name  ] &&
74
                     buffer[index+1]==mUnity[MAX_UNITY_DIM*name+1] &&
75
                     buffer[index+2]==mUnity[MAX_UNITY_DIM*name+2];
76
      case 4: return buffer[index  ]==mUnity[MAX_UNITY_DIM*name  ] &&
77
                     buffer[index+1]==mUnity[MAX_UNITY_DIM*name+1] &&
78
                     buffer[index+2]==mUnity[MAX_UNITY_DIM*name+2] &&
79
                     buffer[index+3]==mUnity[MAX_UNITY_DIM*name+3];
80
      }
81
82
    return false;
83 b547aaba leszek
    }
84 6bb59aad Leszek Koltunski
///////////////////////////////////////////////////////////////////////////////////////////////////
85
86 da9b3f07 Leszek Koltunski
  public EffectType getType()
87 b547aaba leszek
    {
88
    return mType;
89
    }
90 8eccf334 Leszek Koltunski
91 6d62a900 Leszek Koltunski
///////////////////////////////////////////////////////////////////////////////////////////////////
92
93 da9b3f07 Leszek Koltunski
  public EffectName getName()
94 6d62a900 Leszek Koltunski
    {
95
    return mName;
96
    }
97
98 b547aaba leszek
///////////////////////////////////////////////////////////////////////////////////////////////////
99 8eccf334 Leszek Koltunski
100 b547aaba leszek
  public long getID()
101
    {
102
    return mID;
103 8eccf334 Leszek Koltunski
    }
104
105 6bb59aad Leszek Koltunski
///////////////////////////////////////////////////////////////////////////////////////////////////
106
107
  public String getString()
108
    {
109 da9b3f07 Leszek Koltunski
    return mName.name();
110 6bb59aad Leszek Koltunski
    }
111
112 8eccf334 Leszek Koltunski
///////////////////////////////////////////////////////////////////////////////////////////////////
113
114 b547aaba leszek
  public boolean supportsCenter()
115 8eccf334 Leszek Koltunski
    {
116 b547aaba leszek
    return mSupportsC;
117 8eccf334 Leszek Koltunski
    }
118
119
///////////////////////////////////////////////////////////////////////////////////////////////////
120
121 b547aaba leszek
  public boolean supportsRegion()
122 8eccf334 Leszek Koltunski
    {
123 b547aaba leszek
    return mSupportsR;
124 8eccf334 Leszek Koltunski
    }
125
126
///////////////////////////////////////////////////////////////////////////////////////////////////
127
128 b547aaba leszek
  public int getDimension()
129 8eccf334 Leszek Koltunski
    {
130 b547aaba leszek
    return mDimension;
131 8eccf334 Leszek Koltunski
    }
132
133
///////////////////////////////////////////////////////////////////////////////////////////////////
134
135 9d0d8530 leszek
  Effect(EffectName name)
136 8eccf334 Leszek Koltunski
    {
137 6d62a900 Leszek Koltunski
    mName      = name;
138 9d0d8530 leszek
    mType      = name.getType();
139
    mDimension = name.getDimension();
140
    mSupportsC = name.supportsCenter();
141
    mSupportsR = name.supportsRegion();
142 da9b3f07 Leszek Koltunski
143
    int n = name.ordinal();
144 9d0d8530 leszek
    float[] u = name.getUnity();
145
    int l = name.getUnity().length;
146 da9b3f07 Leszek Koltunski
147
    for(int i=0; i<l; i++)
148
      {
149 9d0d8530 leszek
      mUnity[n*MAX_UNITY_DIM+i] = u[i];
150 da9b3f07 Leszek Koltunski
      }
151
152
    mUnityDim[n] = l;
153 9d0d8530 leszek
154 2ef5dd9e leszek
    mID = ((mNextID++)<<EffectType.LENGTH) + mType.ordinal();
155 8eccf334 Leszek Koltunski
    }
156
  }