Project

General

Profile

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

library / src / main / java / org / distorted / library / main / DistortedEffects.java @ 9becf30e

1 d333eb6b Leszek Koltunski
///////////////////////////////////////////////////////////////////////////////////////////////////
2
// Copyright 2016 Leszek Koltunski                                                               //
3
//                                                                                               //
4 46b572b5 Leszek Koltunski
// This file is part of Distorted.                                                               //
5 d333eb6b Leszek Koltunski
//                                                                                               //
6 46b572b5 Leszek Koltunski
// Distorted is free software: you can redistribute it and/or modify                             //
7 d333eb6b Leszek Koltunski
// 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 46b572b5 Leszek Koltunski
// Distorted is distributed in the hope that it will be useful,                                  //
12 d333eb6b Leszek Koltunski
// 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 46b572b5 Leszek Koltunski
// along with Distorted.  If not, see <http://www.gnu.org/licenses/>.                            //
18 d333eb6b Leszek Koltunski
///////////////////////////////////////////////////////////////////////////////////////////////////
19
20 fe82a979 Leszek Koltunski
package org.distorted.library.main;
21 6a06a912 Leszek Koltunski
22 fe82a979 Leszek Koltunski
import org.distorted.library.effect.Effect;
23 da9b3f07 Leszek Koltunski
import org.distorted.library.effect.EffectName;
24 809dcae3 Leszek Koltunski
import org.distorted.library.effectqueue.EffectQueue;
25 da9b3f07 Leszek Koltunski
import org.distorted.library.effect.EffectType;
26 9becf30e Leszek Koltunski
import org.distorted.library.effectqueue.EffectQueueVertex;
27
28
import java.util.ArrayList;
29 c638c1b0 Leszek Koltunski
30 6a06a912 Leszek Koltunski
///////////////////////////////////////////////////////////////////////////////////////////////////
31 b329f352 Leszek Koltunski
/**
32 faa3ff56 Leszek Koltunski
 * Class containing Matrix, Vertex, Fragment and Postprocessing effect queues.
33 b73dcaa7 Leszek Koltunski
 * <p>
34 715e7726 Leszek Koltunski
 * The queues hold actual effects to be applied to a given (InputSurface,MeshBase) combo.
35 b329f352 Leszek Koltunski
 */
36 86d322b5 Leszek Koltunski
public class DistortedEffects
37 d425545a Leszek Koltunski
  {
38 9becf30e Leszek Koltunski
  private static ArrayList<DistortedEffects> mAllEffectQueues = new ArrayList<>();
39 8e34674e Leszek Koltunski
  private static long mNextID =0;
40 4e2382f3 Leszek Koltunski
  private long mID;
41 a0397f32 Leszek Koltunski
  private EffectQueue[] mQueues;
42 3d590d8d Leszek Koltunski
43 55c14a19 Leszek Koltunski
///////////////////////////////////////////////////////////////////////////////////////////////////
44 809dcae3 Leszek Koltunski
/**
45
 * @y.exclude
46
 */
47
  public EffectQueue[] getQueues()
48 d425545a Leszek Koltunski
    {
49 a0397f32 Leszek Koltunski
    return mQueues;
50 80b3acf6 Leszek Koltunski
    }
51
52 78e89fb5 Leszek Koltunski
///////////////////////////////////////////////////////////////////////////////////////////////////
53
54
  static void onDestroy()
55
    {
56
    mNextID =  0;
57 9becf30e Leszek Koltunski
    mAllEffectQueues.clear();
58
    }
59
60
///////////////////////////////////////////////////////////////////////////////////////////////////
61
/**
62
 * @y.exclude
63
 */
64
  public static void setAssociation(long effectID)
65
    {
66
    EffectQueue[] queues;
67
    int numQueues = mAllEffectQueues.size();
68
69
    for(int i=0; i<numQueues; i++)
70
      {
71
      queues = mAllEffectQueues.get(i).getQueues();
72
      ((EffectQueueVertex)queues[1]).setAssociation(effectID);
73
      }
74 78e89fb5 Leszek Koltunski
    }
75
76 8e34674e Leszek Koltunski
///////////////////////////////////////////////////////////////////////////////////////////////////
77
// PUBLIC API
78 ada90d33 Leszek Koltunski
///////////////////////////////////////////////////////////////////////////////////////////////////
79 d425545a Leszek Koltunski
/**
80 4e2382f3 Leszek Koltunski
 * Create empty effect queue.
81 d425545a Leszek Koltunski
 */
82 044b5494 Leszek Koltunski
 public DistortedEffects()
83 d425545a Leszek Koltunski
    {
84 c7da4e65 leszek
    mID = ++mNextID;
85 a0397f32 Leszek Koltunski
    mQueues = new EffectQueue[EffectType.LENGTH];
86 20dbec0e Leszek Koltunski
    EffectQueue.allocateQueues(mQueues,null,0);
87 9becf30e Leszek Koltunski
    mAllEffectQueues.add(this);
88 d425545a Leszek Koltunski
    }
89 ada90d33 Leszek Koltunski
90
///////////////////////////////////////////////////////////////////////////////////////////////////
91 d425545a Leszek Koltunski
/**
92 4e2382f3 Leszek Koltunski
 * Copy constructor.
93 d425545a Leszek Koltunski
 * <p>
94
 * Whatever we do not clone gets created just like in the default constructor.
95
 *
96
 * @param dc    Source object to create our object from
97
 * @param flags A bitmask of values specifying what to copy.
98 e6ab30eb Leszek Koltunski
 *              For example, CLONE_VERTEX | CLONE_MATRIX.
99 d425545a Leszek Koltunski
 */
100 421c2728 Leszek Koltunski
  public DistortedEffects(DistortedEffects dc, int flags)
101 d425545a Leszek Koltunski
    {
102 c7da4e65 leszek
    mID = ++mNextID;
103 a0397f32 Leszek Koltunski
    mQueues = new EffectQueue[EffectType.LENGTH];
104 20dbec0e Leszek Koltunski
    EffectQueue.allocateQueues(mQueues,dc.getQueues(),flags);
105 9becf30e Leszek Koltunski
    mAllEffectQueues.add(this);
106 d425545a Leszek Koltunski
    }
107 6a06a912 Leszek Koltunski
108
///////////////////////////////////////////////////////////////////////////////////////////////////
109
/**
110 4e2382f3 Leszek Koltunski
 * Returns unique ID of this instance.
111
 *
112
 * @return ID of the object.
113 6a06a912 Leszek Koltunski
 */
114 4e2382f3 Leszek Koltunski
  public long getID()
115 d425545a Leszek Koltunski
      {
116 4e2382f3 Leszek Koltunski
      return mID;
117 d425545a Leszek Koltunski
      }
118 4e2382f3 Leszek Koltunski
119 6a06a912 Leszek Koltunski
///////////////////////////////////////////////////////////////////////////////////////////////////
120
/**
121 d07f2950 Leszek Koltunski
 * Aborts all Effects.
122
 * @return Number of effects aborted.
123 6a06a912 Leszek Koltunski
 */
124 d425545a Leszek Koltunski
  public int abortAllEffects()
125 13687207 leszek
    {
126 a0397f32 Leszek Koltunski
    int aborted = 0;
127
128
    for( int i=0; i<EffectType.LENGTH; i++)
129
      {
130 ceed2df6 Leszek Koltunski
      aborted += mQueues[i].removeAll(true);
131 a0397f32 Leszek Koltunski
      }
132
133
    return aborted;
134 13687207 leszek
    }
135 6a06a912 Leszek Koltunski
136
///////////////////////////////////////////////////////////////////////////////////////////////////
137
/**
138 d07f2950 Leszek Koltunski
 * Aborts all Effects of a given type, for example all MATRIX Effects.
139 6a06a912 Leszek Koltunski
 * 
140 da9b3f07 Leszek Koltunski
 * @param type one of the constants defined in {@link EffectType}
141 d07f2950 Leszek Koltunski
 * @return Number of effects aborted.
142 6a06a912 Leszek Koltunski
 */
143 da9b3f07 Leszek Koltunski
  public int abortByType(EffectType type)
144 d425545a Leszek Koltunski
    {
145 a0397f32 Leszek Koltunski
    int num = type.ordinal();
146 ceed2df6 Leszek Koltunski
    return mQueues[num].removeAll(true);
147 d425545a Leszek Koltunski
    }
148 47316d20 leszek
149
///////////////////////////////////////////////////////////////////////////////////////////////////
150
/**
151 faa3ff56 Leszek Koltunski
 * Aborts an Effect by its ID.
152 47316d20 leszek
 *
153
 * @param id the Id of the Effect to be removed, as returned by getID().
154
 * @return Number of effects aborted.
155
 */
156
  public int abortById(long id)
157
    {
158 a0397f32 Leszek Koltunski
    int num = (int)(id&EffectType.MASK);
159
    return mQueues[num].removeById(id);
160 47316d20 leszek
    }
161
162 6a06a912 Leszek Koltunski
///////////////////////////////////////////////////////////////////////////////////////////////////
163
/**
164
 * Aborts a single Effect.
165
 * 
166 6bb59aad Leszek Koltunski
 * @param effect the Effect we want to abort.
167 476bbc81 Leszek Koltunski
 * @return number of Effects aborted. Always either 0 or 1.
168 6a06a912 Leszek Koltunski
 */
169 6bb59aad Leszek Koltunski
  public int abortEffect(Effect effect)
170 d425545a Leszek Koltunski
    {
171 a0397f32 Leszek Koltunski
    int num = effect.getType().ordinal();
172
    return mQueues[num].removeEffect(effect);
173 d425545a Leszek Koltunski
    }
174 6a06a912 Leszek Koltunski
175
///////////////////////////////////////////////////////////////////////////////////////////////////
176
/**
177 e8c81a8e Leszek Koltunski
 * Abort all Effects of a given name, for example all rotations.
178 6a06a912 Leszek Koltunski
 * 
179 da9b3f07 Leszek Koltunski
 * @param name one of the constants defined in {@link EffectName}
180 476bbc81 Leszek Koltunski
 * @return number of Effects aborted.
181 6a06a912 Leszek Koltunski
 */
182 da9b3f07 Leszek Koltunski
  public int abortByName(EffectName name)
183 d425545a Leszek Koltunski
    {
184 a0397f32 Leszek Koltunski
    int num = name.getType().ordinal();
185
    return mQueues[num].removeByName(name);
186 d425545a Leszek Koltunski
    }
187 432442f9 Leszek Koltunski
188 6a06a912 Leszek Koltunski
///////////////////////////////////////////////////////////////////////////////////////////////////
189
/**
190 34e43b0a Leszek Koltunski
 * Add a new Effect to the tail of our queue.
191 f2fe7e28 Leszek Koltunski
 *
192 6bb59aad Leszek Koltunski
 * @param effect The Effect to add.
193 ae77d55e Leszek Koltunski
 * @return <code>true</code> if operation was successful, <code>false</code> otherwise.
194 6a06a912 Leszek Koltunski
 */
195 ae77d55e Leszek Koltunski
  public boolean apply(Effect effect)
196 d425545a Leszek Koltunski
    {
197 a0397f32 Leszek Koltunski
    int num = effect.getType().ordinal();
198
    return mQueues[num].add(effect);
199 4fde55a0 Leszek Koltunski
    }
200 34e43b0a Leszek Koltunski
201
///////////////////////////////////////////////////////////////////////////////////////////////////
202
/**
203
 * Add a new Effect to our queue at a specified position.
204
 *
205
 * @param effect The Effect to add.
206
 * @param position the place in the effects queue where to add the new effect.
207
 * @return <code>true</code> if operation was successful, <code>false</code> otherwise.
208
 */
209
  public boolean apply(Effect effect, int position)
210
    {
211
    int num = effect.getType().ordinal();
212
    return mQueues[num].add(effect,position);
213
    }
214 106ae28d Leszek Koltunski
215
///////////////////////////////////////////////////////////////////////////////////////////////////
216
/**
217
 * Return number of effects of the given type currently in the Queue.
218
 *
219
 * @param type The EffectType.
220
 * @return Number of effects of the given type currently in the Queue.
221
 */
222
  public int getNumEffects(EffectType type)
223
    {
224
    int num = type.ordinal();
225
    return mQueues[num].getNumEffects();
226
    }
227 f2fe7e28 Leszek Koltunski
  }