Revision 1fad573e
Added by Leszek Koltunski almost 4 years ago
src/main/java/org/distorted/library/mesh/DeferredJobs.java | ||
---|---|---|
22 | 22 |
import org.distorted.library.effect.VertexEffect; |
23 | 23 |
import org.distorted.library.effectqueue.EffectQueueVertex; |
24 | 24 |
import org.distorted.library.main.DistortedLibrary; |
25 |
import org.distorted.library.type.Static4D; |
|
25 | 26 |
|
26 | 27 |
import java.util.ArrayList; |
27 | 28 |
|
29 |
import android.util.Log; |
|
30 |
|
|
28 | 31 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
29 | 32 |
/** |
30 | 33 |
* Not part of public API, do not document (public only because has to be cleaned from the main package) |
... | ... | |
37 | 40 |
private static final int JOB_TYPE_MERGE = 1; |
38 | 41 |
private static final int JOB_TYPE_JOIN = 2; |
39 | 42 |
private static final int JOB_TYPE_COPY = 3; |
43 |
private static final int JOB_TYPE_TEXTURE= 4; |
|
40 | 44 |
|
41 | 45 |
private static ArrayList<JobNode> mJobs = new ArrayList<>(); |
42 | 46 |
|
... | ... | |
45 | 49 |
private static class Job |
46 | 50 |
{ |
47 | 51 |
private int mType; |
48 |
private int mArg; |
|
49 | 52 |
private MeshBase mTarget; |
50 | 53 |
private MeshBase[] mSource; |
51 | 54 |
private EffectQueueVertex mEffects; |
55 |
private Static4D[] mMaps; |
|
52 | 56 |
|
53 |
Job(int type, MeshBase target, MeshBase[] source, VertexEffect effect, int arg)
|
|
57 |
Job(int type, MeshBase target, MeshBase[] source, VertexEffect effect, Static4D[] maps)
|
|
54 | 58 |
{ |
55 | 59 |
mType = type; |
56 | 60 |
mTarget = target; |
57 | 61 |
mSource = source; |
58 |
mArg = arg;
|
|
62 |
mMaps = maps;
|
|
59 | 63 |
|
60 | 64 |
if( effect!=null ) |
61 | 65 |
{ |
... | ... | |
73 | 77 |
{ |
74 | 78 |
switch(mType) |
75 | 79 |
{ |
76 |
case JOB_TYPE_VERTEX: DistortedLibrary.adjustVertices(mTarget, mEffects); |
|
77 |
break; |
|
78 |
case JOB_TYPE_MERGE : mTarget.merge(); |
|
79 |
break; |
|
80 |
case JOB_TYPE_JOIN : mTarget.joinAttrib1(mSource,mArg); |
|
81 |
break; |
|
82 |
case JOB_TYPE_COPY : mTarget.deepCopyAttribs1(mSource[0]); |
|
83 |
break; |
|
80 |
case JOB_TYPE_VERTEX : DistortedLibrary.adjustVertices(mTarget, mEffects); |
|
81 |
//Log.e("jobs", "executing vertex job"); |
|
82 |
//mTarget.print(); |
|
83 |
break; |
|
84 |
case JOB_TYPE_MERGE : mTarget.merge(); |
|
85 |
//Log.e("jobs", "executing merge job"); |
|
86 |
//mTarget.print(); |
|
87 |
break; |
|
88 |
case JOB_TYPE_JOIN : mTarget.joinAttribs(mSource); |
|
89 |
//Log.e("jobs", "executing join job"); |
|
90 |
//mTarget.print(); |
|
91 |
break; |
|
92 |
case JOB_TYPE_COPY : mTarget.copy(mSource[0]); |
|
93 |
//Log.e("jobs", "executing copy job"); |
|
94 |
//mTarget.print(); |
|
95 |
break; |
|
96 |
case JOB_TYPE_TEXTURE: mTarget.textureMap(mMaps); |
|
97 |
//Log.e("jobs", "executing textureMap job"); |
|
98 |
//mTarget.print(); |
|
99 |
break; |
|
84 | 100 |
} |
85 | 101 |
} |
86 | 102 |
|
... | ... | |
88 | 104 |
{ |
89 | 105 |
if( mEffects!=null ) mEffects.removeAll(false); |
90 | 106 |
} |
107 |
|
|
108 |
String print() |
|
109 |
{ |
|
110 |
switch(mType) |
|
111 |
{ |
|
112 |
case JOB_TYPE_VERTEX : return "VERTEX (eff: "+mEffects.getNumEffects()+" effToBe: "+mEffects.getNumEffectsToBe()+")"; |
|
113 |
case JOB_TYPE_MERGE : return "MERGE"; |
|
114 |
case JOB_TYPE_JOIN : return "JOIN: "+mSource.length; |
|
115 |
case JOB_TYPE_COPY : return "COPY"; |
|
116 |
case JOB_TYPE_TEXTURE: return "TEXTURE"; |
|
117 |
} |
|
118 |
|
|
119 |
return null; |
|
120 |
} |
|
91 | 121 |
} |
92 | 122 |
|
93 | 123 |
////////////////////////////////////////////////////////////////////////// |
... | ... | |
112 | 142 |
|
113 | 143 |
for(int i=0; i<numPrev; i++) |
114 | 144 |
{ |
115 |
node = mPrevJobs.get(i);
|
|
145 |
node = mPrevJobs.get(0); // removeNode() rips the executed job out, thus the 0
|
|
116 | 146 |
node.execute(); |
117 | 147 |
} |
118 | 148 |
|
... | ... | |
130 | 160 |
mJob.clear(); |
131 | 161 |
mJob = null; |
132 | 162 |
} |
163 |
|
|
164 |
void print(int level) |
|
165 |
{ |
|
166 |
int numPrev = mPrevJobs.size(); |
|
167 |
int numNext = mNextJobs.size(); |
|
168 |
|
|
169 |
String str = ""; |
|
170 |
for(int i=0; i<level; i++) str+=" "; |
|
171 |
|
|
172 |
str += mJob.print(); |
|
173 |
|
|
174 |
str += (" next: "+numNext+" prev: "+numPrev); |
|
175 |
|
|
176 |
Log.e("job", str); |
|
177 |
|
|
178 |
for(int i=0; i<numPrev; i++) |
|
179 |
{ |
|
180 |
JobNode node = mPrevJobs.get(i); |
|
181 |
node.print(level+1); |
|
182 |
} |
|
183 |
} |
|
133 | 184 |
} |
134 | 185 |
|
135 | 186 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
... | ... | |
166 | 217 |
|
167 | 218 |
if( jn==null ) |
168 | 219 |
{ |
169 |
Job job = new Job(JOB_TYPE_VERTEX,target,null,effect,0);
|
|
220 |
Job job = new Job(JOB_TYPE_VERTEX,target,null,effect,null);
|
|
170 | 221 |
JobNode node = new JobNode(job); |
171 | 222 |
mJobs.add(node); |
172 | 223 |
return node; |
... | ... | |
180 | 231 |
} |
181 | 232 |
else |
182 | 233 |
{ |
183 |
Job job = new Job(JOB_TYPE_VERTEX,target,null,effect,0);
|
|
234 |
Job job = new Job(JOB_TYPE_VERTEX,target,null,effect,null);
|
|
184 | 235 |
JobNode node = new JobNode(job); |
185 | 236 |
node.mPrevJobs.add(jn); |
186 | 237 |
jn.mNextJobs.add(node); |
... | ... | |
195 | 246 |
static JobNode merge(MeshBase target) |
196 | 247 |
{ |
197 | 248 |
JobNode jn = target.mJobNode[0]; |
198 |
Job job = new Job(JOB_TYPE_MERGE,target,null,null,0);
|
|
249 |
Job job = new Job(JOB_TYPE_MERGE,target,null,null,null);
|
|
199 | 250 |
JobNode node = new JobNode(job); |
200 | 251 |
node.mPrevJobs.add(jn); |
201 | 252 |
jn.mNextJobs.add(node); |
... | ... | |
205 | 256 |
|
206 | 257 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
207 | 258 |
|
208 |
static JobNode join(MeshBase target, MeshBase[] meshes, int origVertices)
|
|
259 |
static JobNode join(MeshBase target, MeshBase[] meshes) |
|
209 | 260 |
{ |
210 | 261 |
JobNode jn; |
211 | 262 |
|
212 |
Job job = new Job(JOB_TYPE_JOIN,target,meshes,null,origVertices);
|
|
263 |
Job job = new Job(JOB_TYPE_JOIN,target,meshes,null,null);
|
|
213 | 264 |
JobNode node = new JobNode(job); |
214 | 265 |
|
215 | 266 |
for (MeshBase mesh : meshes) |
216 | 267 |
{ |
217 | 268 |
jn = mesh.mJobNode[0]; |
218 |
node.mPrevJobs.add(jn); |
|
219 |
jn.mNextJobs.add(node); |
|
269 |
|
|
270 |
if( jn!=null ) |
|
271 |
{ |
|
272 |
node.mPrevJobs.add(jn); |
|
273 |
jn.mNextJobs.add(node); |
|
274 |
} |
|
220 | 275 |
} |
221 | 276 |
|
222 | 277 |
mJobs.add(node); |
... | ... | |
230 | 285 |
JobNode jn = mesh.mJobNode[0]; |
231 | 286 |
MeshBase[] meshes = new MeshBase[1]; |
232 | 287 |
meshes[0] = mesh; |
233 |
Job job = new Job(JOB_TYPE_COPY,target,meshes,null,0); |
|
288 |
Job job = new Job(JOB_TYPE_COPY,target,meshes,null,null); |
|
289 |
JobNode node = new JobNode(job); |
|
290 |
node.mPrevJobs.add(jn); |
|
291 |
jn.mNextJobs.add(node); |
|
292 |
mJobs.add(node); |
|
293 |
return node; |
|
294 |
} |
|
295 |
|
|
296 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
|
297 |
|
|
298 |
static JobNode textureMap(MeshBase target, Static4D[] maps) |
|
299 |
{ |
|
300 |
JobNode jn = target.mJobNode[0]; |
|
301 |
Job job = new Job(JOB_TYPE_TEXTURE,target,null,null,maps); |
|
234 | 302 |
JobNode node = new JobNode(job); |
235 | 303 |
node.mPrevJobs.add(jn); |
236 | 304 |
jn.mNextJobs.add(node); |
Also available in: Unified diff
DeferredJobs app/lib works now