Revision 3bbe4d67
Added by Leszek Koltunski almost 5 years ago
| src/main/java/org/distorted/library/effectqueue/EffectQueue.java | ||
|---|---|---|
| 53 | 53 |
float[] mFloatUniforms; |
| 54 | 54 |
int[] mIntUniforms; |
| 55 | 55 |
|
| 56 |
private static long mNextID = 1; |
|
| 57 |
private static HashMap<ArrayList<Long>,Long> mMapID = new HashMap<>(); // maps lists of Effect IDs (longs) to a |
|
| 58 |
// single long - the queue ID. |
|
| 59 | 56 |
private long mID; |
| 60 | 57 |
private int mIndex; |
| 61 | 58 |
private boolean mCreated; |
| ... | ... | |
| 203 | 200 |
{
|
| 204 | 201 |
if( mNumEffects>0 ) |
| 205 | 202 |
{
|
| 203 |
HashMap<ArrayList<Long>,Long> map = InternalStackFrameList.getMap(); |
|
| 206 | 204 |
ArrayList<Long> list = new ArrayList<>(); |
| 207 |
for (int i = 0; i < mNumEffects; i++) list.add(mEffects[i].getID());
|
|
| 208 |
Long id = mMapID.get(list);
|
|
| 205 |
for (int i=0; i<mNumEffects; i++) list.add(mEffects[i].getID());
|
|
| 206 |
Long id = map.get(list);
|
|
| 209 | 207 |
|
| 210 | 208 |
if( id!=null ) |
| 211 | 209 |
{
|
| ... | ... | |
| 213 | 211 |
} |
| 214 | 212 |
else |
| 215 | 213 |
{
|
| 216 |
mMapID.put(list,mNextID);
|
|
| 217 |
mID = mNextID++;
|
|
| 214 |
mID = InternalStackFrameList.getNextQueueID();
|
|
| 215 |
map.put(list,mID);
|
|
| 218 | 216 |
} |
| 219 | 217 |
} |
| 220 | 218 |
else |
| ... | ... | |
| 244 | 242 |
return InternalStackFrameList.getMax(index); |
| 245 | 243 |
} |
| 246 | 244 |
|
| 247 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
|
| 248 |
|
|
| 249 |
public static void onDestroy() |
|
| 250 |
{
|
|
| 251 |
mNextID = 1; |
|
| 252 |
mMapID.clear(); |
|
| 253 |
} |
|
| 254 |
|
|
| 255 | 245 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
| 256 | 246 |
// this assumes 0<=effect |
| 257 | 247 |
|
| src/main/java/org/distorted/library/main/DistortedLibrary.java | ||
|---|---|---|
| 1133 | 1133 |
if( InternalStackFrameList.isInitialized() ) |
| 1134 | 1134 |
{
|
| 1135 | 1135 |
InternalStackFrameList.onDestroy(id); |
| 1136 |
InternalMaster.onDestroy(); |
|
| 1137 |
InternalOutputSurface.onDestroy(); |
|
| 1138 |
EffectQueue.onDestroy(); |
|
| 1139 |
Effect.onDestroy(); |
|
| 1140 |
DeferredJobs.onDestroy(); |
|
| 1136 |
|
|
| 1137 |
InternalOutputSurface.onDestroy(); // those three really destroy |
|
| 1138 |
Effect.onDestroy(); // static data that does not |
|
| 1139 |
DeferredJobs.onDestroy(); // need to be part of a frame |
|
| 1141 | 1140 |
|
| 1142 | 1141 |
mOITCompilationAttempted = false; |
| 1143 | 1142 |
} |
| src/main/java/org/distorted/library/main/InternalMaster.java | ||
|---|---|---|
| 19 | 19 |
|
| 20 | 20 |
package org.distorted.library.main; |
| 21 | 21 |
|
| 22 |
import java.util.ArrayList;
|
|
| 22 |
import java.util.Set;
|
|
| 23 | 23 |
|
| 24 | 24 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
| 25 | 25 |
/** |
| ... | ... | |
| 32 | 32 |
*/ |
| 33 | 33 |
public class InternalMaster |
| 34 | 34 |
{
|
| 35 |
private static ArrayList<Slave> mSlaves = new ArrayList<>(); |
|
| 36 |
|
|
| 37 | 35 |
public interface Slave |
| 38 | 36 |
{
|
| 39 | 37 |
void doWork(); |
| ... | ... | |
| 50 | 48 |
|
| 51 | 49 |
static boolean toDo() |
| 52 | 50 |
{
|
| 53 |
Slave slave;
|
|
| 54 |
int num = mSlaves.size();
|
|
| 51 |
Set<Slave> set = InternalStackFrameList.getSet();
|
|
| 52 |
int numSlaves = set.size();
|
|
| 55 | 53 |
|
| 56 |
try
|
|
| 54 |
if( numSlaves>0 )
|
|
| 57 | 55 |
{
|
| 58 |
for(int i=0; i<num; i++)
|
|
| 56 |
for(Slave slave: set)
|
|
| 59 | 57 |
{
|
| 60 |
slave = mSlaves.remove(0); |
|
| 61 |
|
|
| 62 |
if( slave!=null ) slave.doWork(); |
|
| 63 |
} |
|
| 64 |
} |
|
| 65 |
catch(IndexOutOfBoundsException ie) |
|
| 66 |
{
|
|
| 67 |
// onDestroy must have been called, ignore |
|
| 58 |
if( slave!=null ) slave.doWork(); |
|
| 59 |
} |
|
| 60 |
return true; |
|
| 68 | 61 |
} |
| 69 | 62 |
|
| 70 |
return ( num>0 );
|
|
| 63 |
return false;
|
|
| 71 | 64 |
} |
| 72 | 65 |
|
| 73 | 66 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
| 74 | 67 |
|
| 75 | 68 |
public static void newSlave(Slave s) |
| 76 | 69 |
{
|
| 77 |
int num = mSlaves.size(); |
|
| 78 |
boolean found = false; |
|
| 79 |
Slave tmp; |
|
| 80 |
|
|
| 81 |
try |
|
| 82 |
{
|
|
| 83 |
for(int i=0; i<num; i++) |
|
| 84 |
{
|
|
| 85 |
tmp = mSlaves.get(i); |
|
| 86 |
|
|
| 87 |
if( tmp==s ) |
|
| 88 |
{
|
|
| 89 |
found = true; |
|
| 90 |
break; |
|
| 91 |
} |
|
| 92 |
} |
|
| 93 |
} |
|
| 94 |
catch(IndexOutOfBoundsException ie) |
|
| 95 |
{
|
|
| 96 |
// onDestroy must have been called, ignore |
|
| 97 |
} |
|
| 98 |
|
|
| 99 |
if( !found ) mSlaves.add(s); |
|
| 100 |
} |
|
| 101 |
|
|
| 102 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
|
| 103 |
|
|
| 104 |
static void onDestroy() |
|
| 105 |
{
|
|
| 106 |
mSlaves.clear(); |
|
| 70 |
InternalStackFrameList.getSet().add(s); |
|
| 107 | 71 |
} |
| 108 | 72 |
} |
| src/main/java/org/distorted/library/main/InternalStackFrame.java | ||
|---|---|---|
| 23 | 23 |
|
| 24 | 24 |
import java.util.ArrayList; |
| 25 | 25 |
import java.util.HashMap; |
| 26 |
import java.util.HashSet; |
|
| 26 | 27 |
import java.util.LinkedList; |
| 28 |
import java.util.Set; |
|
| 27 | 29 |
|
| 28 | 30 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
| 29 | 31 |
|
| ... | ... | |
| 69 | 71 |
private HashMap<ArrayList<Long>, InternalNodeData> mMapNodeID; // InternalNodeData |
| 70 | 72 |
private long mNextNodeID; |
| 71 | 73 |
|
| 74 |
////////////////////////////////////////////////////////////////// |
|
| 75 |
private Set<InternalMaster.Slave> mSlaves; // InternalMaster |
|
| 76 |
|
|
| 77 |
////////////////////////////////////////////////////////////////// EffectQueue |
|
| 78 |
private long mNextQueueID; // |
|
| 79 |
private HashMap<ArrayList<Long>,Long> mMapID; // maps lists of Effect IDs (longs) |
|
| 80 |
// to a single long - the queue ID. |
|
| 81 |
|
|
| 72 | 82 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
| 73 | 83 |
|
| 74 | 84 |
InternalStackFrame(long taskID) |
| ... | ... | |
| 76 | 86 |
mDoneList = new LinkedList<>(); |
| 77 | 87 |
mToDoMap = new HashMap<>(); |
| 78 | 88 |
mMapNodeID = new HashMap<>(); |
| 89 |
mSlaves = new HashSet<>(); |
|
| 90 |
mMapID = new HashMap<>(); |
|
| 79 | 91 |
mNextEffectsID= 0; |
| 80 | 92 |
mNextClientID = 0; |
| 81 | 93 |
mNextSystemID = 0; |
| 82 | 94 |
mNextNodeID = 0; |
| 95 |
mNextQueueID = 1; |
|
| 83 | 96 |
mTaskId = taskID; |
| 84 | 97 |
mMax = new int[EffectType.LENGTH]; |
| 85 | 98 |
|
| ... | ... | |
| 285 | 298 |
return false; |
| 286 | 299 |
} |
| 287 | 300 |
|
| 301 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
|
| 302 |
|
|
| 303 |
public HashMap<ArrayList<Long>,Long> getMap() |
|
| 304 |
{
|
|
| 305 |
return mMapID; |
|
| 306 |
} |
|
| 307 |
|
|
| 308 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
|
| 309 |
|
|
| 310 |
public long getNextQueueID() |
|
| 311 |
{
|
|
| 312 |
mNextQueueID++; |
|
| 313 |
|
|
| 314 |
return mNextQueueID-1; |
|
| 315 |
} |
|
| 316 |
|
|
| 288 | 317 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
| 289 | 318 |
|
| 290 | 319 |
InternalNodeData getMapID(ArrayList<Long> key) |
| ... | ... | |
| 308 | 337 |
mMapNodeID.remove(key); |
| 309 | 338 |
} |
| 310 | 339 |
|
| 340 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
|
| 341 |
|
|
| 342 |
Set<InternalMaster.Slave> getSet() |
|
| 343 |
{
|
|
| 344 |
return mSlaves; |
|
| 345 |
} |
|
| 346 |
|
|
| 311 | 347 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
| 312 | 348 |
|
| 313 | 349 |
void debugLists(String frameMarker) |
| src/main/java/org/distorted/library/main/InternalStackFrameList.java | ||
|---|---|---|
| 22 | 22 |
import org.distorted.library.message.EffectMessageSender; |
| 23 | 23 |
|
| 24 | 24 |
import java.util.ArrayList; |
| 25 |
import java.util.HashMap; |
|
| 26 |
import java.util.Set; |
|
| 25 | 27 |
|
| 26 | 28 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
| 27 | 29 |
|
| ... | ... | |
| 250 | 252 |
mCurrentFrame.removeKeyFromMap(key); |
| 251 | 253 |
} |
| 252 | 254 |
|
| 255 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
|
| 256 |
|
|
| 257 |
static Set<InternalMaster.Slave> getSet() |
|
| 258 |
{
|
|
| 259 |
return mCurrentFrame.getSet(); |
|
| 260 |
} |
|
| 261 |
|
|
| 253 | 262 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
| 254 | 263 |
// PUBLIC API |
| 255 | 264 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
| ... | ... | |
| 279 | 288 |
{
|
| 280 | 289 |
return mCurrentFrame.setMax(index,max); |
| 281 | 290 |
} |
| 291 |
|
|
| 292 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
|
| 293 |
|
|
| 294 |
public static HashMap<ArrayList<Long>,Long> getMap() |
|
| 295 |
{
|
|
| 296 |
return mCurrentFrame.getMap(); |
|
| 297 |
} |
|
| 298 |
|
|
| 299 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
|
| 300 |
|
|
| 301 |
public static long getNextQueueID() |
|
| 302 |
{
|
|
| 303 |
return mCurrentFrame.getNextQueueID(); |
|
| 304 |
} |
|
| 305 |
|
|
| 306 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
|
| 307 |
|
|
| 282 | 308 |
} |
Also available in: Unified diff
Put new things to the StackFrame.