Project

General

Profile

« Previous | Next » 

Revision a8dfedcc

Added by Leszek Koltunski almost 4 years ago

Progress with DeferredJobs (apply, copy, merge & join should be working now - untested)

View differences:

src/main/java/org/distorted/library/mesh/DeferredJobs.java
45 45
  private static class Job
46 46
    {
47 47
    private int mType;
48
    private int mArg;
48 49
    private MeshBase mTarget;
49 50
    private MeshBase[] mSource;
50 51
    private EffectQueueVertex mEffects;
51 52

  
52
    Job(int type, MeshBase target, MeshBase[] source, VertexEffect effect)
53
    Job(int type, MeshBase target, MeshBase[] source, VertexEffect effect, int arg)
53 54
      {
54 55
      mType   = type;
55 56
      mTarget = target;
56 57
      mSource = source;
58
      mArg    = arg;
57 59
      mEffects= new EffectQueueVertex();
58 60
      mEffects.add(effect);
59 61
      }
60 62

  
61
    Job(Job job)
62
      {
63
      mType   = job.mType;
64
      mTarget = job.mTarget;
65
      mSource = job.mSource;
66
      mEffects= new EffectQueueVertex(job.mEffects);
67
      }
68

  
69 63
    void addEffect(VertexEffect effect)
70 64
      {
71 65
      mEffects.add(effect);
......
77 71
        {
78 72
        case JOB_TYPE_VERTEX: DistortedLibrary.adjustVertices(mTarget, mEffects);
79 73
                              break;
80
        case JOB_TYPE_MERGE : break;
81
        case JOB_TYPE_JOIN  : break;
74
        case JOB_TYPE_MERGE : mTarget.merge();
75
                              break;
76
        case JOB_TYPE_JOIN  : mTarget.joinAttrib1(mSource,mArg);
77
                              break;
82 78
        case JOB_TYPE_COPY  : mTarget.deepCopyAttribs1(mSource[0]);
83 79
                              break;
84 80
        }
......
105 101
      mJob      = job;
106 102
      }
107 103

  
108
    JobNode(JobNode node)
109
      {
110
      mPrevJobs = new ArrayList<>();
111
      mNextJobs = new ArrayList<>();
112
      mJob      = new Job(node.mJob);
113

  
114
      int numPrev = node.mPrevJobs.size();
115

  
116
      for(int i=0; i<numPrev; i++)
117
        {
118
        mPrevJobs.add(node.mPrevJobs.get(i));
119
        }
120

  
121
      int numNext = node.mNextJobs.size();
122

  
123
      for(int i=0; i<numNext; i++)
124
        {
125
        mNextJobs.add(node.mNextJobs.get(i));
126
        }
127
      }
128

  
129 104
    void execute()
130 105
      {
131 106
      JobNode node;
......
187 162

  
188 163
    if( jn==null )
189 164
      {
190
      Job job = new Job(JOB_TYPE_VERTEX,target,null,effect);
165
      Job job = new Job(JOB_TYPE_VERTEX,target,null,effect,0);
191 166
      JobNode node = new JobNode(job);
192 167
      mJobs.add(node);
193 168
      return node;
......
201 176
        }
202 177
      else
203 178
        {
204
        Job job = new Job(JOB_TYPE_VERTEX,target,null,effect);
179
        Job job = new Job(JOB_TYPE_VERTEX,target,null,effect,0);
205 180
        JobNode node = new JobNode(job);
206 181
        node.mPrevJobs.add(jn);
207 182
        jn.mNextJobs.add(node);
......
215 190

  
216 191
  static JobNode merge(MeshBase target)
217 192
    {
218
    return null;
193
    JobNode jn = target.mJobNode[0];
194

  
195
    if( jn==null )
196
      {
197
      android.util.Log.e("deferredJobs", "Error: trying to add a merge job to an empty graph!");
198
      return jn;
199
      }
200
    else
201
      {
202
      if( jn.mJob.mType==JOB_TYPE_MERGE )
203
        {
204
        android.util.Log.e("deferredJobs", "Error: trying to add a second consecutive merge job");
205
        return jn;
206
        }
207
      else
208
        {
209
        Job job = new Job(JOB_TYPE_MERGE,target,null,null,0);
210
        JobNode node = new JobNode(job);
211
        node.mPrevJobs.add(jn);
212
        jn.mNextJobs.add(node);
213
        mJobs.add(node);
214
        return node;
215
        }
216
      }
219 217
    }
220 218

  
221 219
///////////////////////////////////////////////////////////////////////////////////////////////////
222 220

  
223
  static JobNode join(MeshBase target, MeshBase[] meshes)
221
  static JobNode join(MeshBase target, MeshBase[] meshes, int origVertices)
224 222
    {
225
    return null;
223
    JobNode jn = target.mJobNode[0];
224

  
225
    if( jn==null )
226
      {
227
      android.util.Log.e("deferredJobs", "Error: trying to add a join job to an empty graph!");
228
      return jn;
229
      }
230
    else
231
      {
232
      if( jn.mJob.mType==JOB_TYPE_JOIN )
233
        {
234
        android.util.Log.e("deferredJobs", "Error: trying to add a second consecutive join job");
235
        return jn;
236
        }
237
      else
238
        {
239
        Job job = new Job(JOB_TYPE_JOIN,target,meshes,null,origVertices);
240
        JobNode node = new JobNode(job);
241
        node.mPrevJobs.add(jn);
242
        jn.mNextJobs.add(node);
243
        mJobs.add(node);
244
        return node;
245
        }
246
      }
226 247
    }
227 248

  
228 249
///////////////////////////////////////////////////////////////////////////////////////////////////
229 250

  
230 251
  static JobNode copy(MeshBase target, MeshBase mesh)
231 252
    {
232
    return null;
253
    JobNode jn = target.mJobNode[0];
254

  
255
    if( jn==null )
256
      {
257
      android.util.Log.e("deferredJobs", "Error: trying to add a copy job to an empty graph!");
258
      return jn;
259
      }
260
    else
261
      {
262
      if( jn.mJob.mType==JOB_TYPE_COPY )
263
        {
264
        android.util.Log.e("deferredJobs", "Error: trying to add a second consecutive copy job");
265
        return jn;
266
        }
267
      else
268
        {
269
        MeshBase[] meshes = new MeshBase[1];
270
        meshes[0] = mesh;
271
        Job job = new Job(JOB_TYPE_COPY,target,meshes,null,0);
272
        JobNode node = new JobNode(job);
273
        node.mPrevJobs.add(jn);
274
        jn.mNextJobs.add(node);
275
        mJobs.add(node);
276
        return node;
277
        }
278
      }
233 279
    }
234 280

  
235 281
///////////////////////////////////////////////////////////////////////////////////////////////////

Also available in: Unified diff