Project

General

Profile

« Previous | Next » 

Revision 1fad573e

Added by Leszek Koltunski almost 4 years ago

DeferredJobs app/lib works now

View differences:

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