Project

General

Profile

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

library / src / main / java / org / distorted / library / main / DistortedEffects.java @ 6c3a8db8

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