Revision be60d4ff
Added by Leszek Koltunski over 8 years ago
| src/main/java/org/distorted/library/DistortedMaster.java | ||
|---|---|---|
| 75 | 75 | 
    if( !found ) mSlaves.add(s);  | 
| 76 | 76 | 
    }  | 
| 77 | 77 | 
     | 
| 78 | 
    ///////////////////////////////////////////////////////////////////////////////////////////////////  | 
|
| 79 | 
     | 
|
| 80 | 
    static void addSorted(ArrayList<DistortedNode> mChildren, DistortedNode newChild)  | 
|
| 81 | 
        {
   | 
|
| 82 | 
    DistortedNode child;  | 
|
| 83 | 
    DistortedEffectsPostprocess dep;  | 
|
| 84 | 
    int i,num = mChildren.size();  | 
|
| 85 | 
    long bucket, newBucket;  | 
|
| 86 | 
     | 
|
| 87 | 
    dep = newChild.getEffectsPostprocess();  | 
|
| 88 | 
    newBucket = dep==null ? 0 : dep.getBucket();  | 
|
| 89 | 
     | 
|
| 90 | 
    for(i=0; i<num; i++)  | 
|
| 91 | 
          {
   | 
|
| 92 | 
    child = mChildren.get(i);  | 
|
| 93 | 
    dep = child.getEffectsPostprocess();  | 
|
| 94 | 
    bucket= dep==null ? 0 : dep.getBucket();  | 
|
| 95 | 
     | 
|
| 96 | 
    if( bucket>newBucket ) break;  | 
|
| 97 | 
    }  | 
|
| 98 | 
     | 
|
| 99 | 
    mChildren.add(i,newChild);  | 
|
| 100 | 
     | 
|
| 101 | 
        //android.util.Log.e("newChild", "newBucket="+newBucket+" new child at "+i+" total num ="+num);
   | 
|
| 102 | 
    }  | 
|
| 103 | 
     | 
|
| 78 | 104 | 
    ///////////////////////////////////////////////////////////////////////////////////////////////////  | 
| 79 | 105 | 
     | 
| 80 | 106 | 
    static void onDestroy()  | 
| src/main/java/org/distorted/library/DistortedNode.java | ||
|---|---|---|
| 63 | 63 | 
    private static long mNextNodeID =0;  | 
| 64 | 64 | 
     | 
| 65 | 65 | 
    private DistortedNode mParent;  | 
| 66 | 
    private DistortedOutputSurface mSurfaceParent;  | 
|
| 66 | 67 | 
    private MeshObject mMesh;  | 
| 67 | 68 | 
    private DistortedEffects mEffects;  | 
| 68 | 69 | 
    private DistortedEffectsPostprocess mPostprocess;  | 
| ... | ... | |
| 261 | 262 | 
    return numRenders;  | 
| 262 | 263 | 
    }  | 
| 263 | 264 | 
     | 
| 265 | 
    ///////////////////////////////////////////////////////////////////////////////////////////////////  | 
|
| 266 | 
     | 
|
| 267 | 
    private void newJob(int t, DistortedNode n, DistortedEffectsPostprocess d)  | 
|
| 268 | 
        {
   | 
|
| 269 | 
    mJobs.add(new Job(t,n,d));  | 
|
| 270 | 
    }  | 
|
| 271 | 
     | 
|
| 272 | 
    ///////////////////////////////////////////////////////////////////////////////////////////////////  | 
|
| 273 | 
     | 
|
| 274 | 
    void setPost(DistortedEffectsPostprocess dep)  | 
|
| 275 | 
        {
   | 
|
| 276 | 
    mPostprocess = dep;  | 
|
| 277 | 
    }  | 
|
| 278 | 
     | 
|
| 279 | 
    ///////////////////////////////////////////////////////////////////////////////////////////////////  | 
|
| 280 | 
     | 
|
| 281 | 
    void setSurfaceParent(DistortedOutputSurface dep)  | 
|
| 282 | 
        {
   | 
|
| 283 | 
    mSurfaceParent = dep;  | 
|
| 284 | 
    mParent = null;  | 
|
| 285 | 
    }  | 
|
| 286 | 
     | 
|
| 264 | 287 | 
    ///////////////////////////////////////////////////////////////////////////////////////////////////  | 
| 265 | 288 | 
    // PUBLIC API  | 
| 266 | 289 | 
    ///////////////////////////////////////////////////////////////////////////////////////////////////  | 
| ... | ... | |
| 282 | 305 | 
    mNumChildren = new int[1];  | 
| 283 | 306 | 
    mNumChildren[0]= 0;  | 
| 284 | 307 | 
    mParent = null;  | 
| 308 | 
    mSurfaceParent = null;  | 
|
| 285 | 309 | 
     | 
| 286 | 310 | 
    ArrayList<Long> list = new ArrayList<>();  | 
| 287 | 311 | 
    list.add(mSurface.getID());  | 
| ... | ... | |
| 312 | 336 | 
    */  | 
| 313 | 337 | 
    public DistortedNode(DistortedNode node, int flags)  | 
| 314 | 338 | 
        {
   | 
| 315 | 
    mEffects = new DistortedEffects(node.mEffects,flags);  | 
|
| 316 | 
    mPostprocess = null;  | 
|
| 317 | 
    mMesh = node.mMesh;  | 
|
| 318 | 
    mState = new DistortedRenderState();  | 
|
| 319 | 
    mParent = null;  | 
|
| 339 | 
    mEffects = new DistortedEffects(node.mEffects,flags);  | 
|
| 340 | 
    mPostprocess = null;  | 
|
| 341 | 
    mMesh = node.mMesh;  | 
|
| 342 | 
    mState = new DistortedRenderState();  | 
|
| 343 | 
    mParent = null;  | 
|
| 344 | 
    mSurfaceParent= null;  | 
|
| 320 | 345 | 
     | 
| 321 | 346 | 
    if( (flags & Distorted.CLONE_SURFACE) != 0 )  | 
| 322 | 347 | 
          {
   | 
| ... | ... | |
| 497 | 522 | 
    Job job;  | 
| 498 | 523 | 
     | 
| 499 | 524 | 
    int numChanges=0;  | 
| 500 | 
    int numSorts =0;  | 
|
| 501 | 525 | 
     | 
| 502 | 526 | 
    for(int i=0; i<num; i++)  | 
| 503 | 527 | 
          {
   | 
| ... | ... | |
| 508 | 532 | 
    case ATTACH: numChanges++;  | 
| 509 | 533 | 
    if( mChildren==null ) mChildren = new ArrayList<>(2);  | 
| 510 | 534 | 
    job.node.mParent = this;  | 
| 511 | 
    mChildren.add(job.node);  | 
|
| 535 | 
    job.node.mSurfaceParent = null;  | 
|
| 536 | 
    DistortedMaster.addSorted(mChildren,job.node);  | 
|
| 512 | 537 | 
    mNumChildren[0]++;  | 
| 513 | 538 | 
    break;  | 
| 514 | 539 | 
    case DETACH: numChanges++;  | 
| 515 | 540 | 
    if( mNumChildren[0]>0 && mChildren.remove(job.node) )  | 
| 516 | 541 | 
                           {
   | 
| 517 | 542 | 
    job.node.mParent = null;  | 
| 543 | 
    job.node.mSurfaceParent = null;  | 
|
| 518 | 544 | 
    mNumChildren[0]--;  | 
| 519 | 545 | 
    }  | 
| 520 | 546 | 
    break;  | 
| ... | ... | |
| 527 | 553 | 
                             {
   | 
| 528 | 554 | 
    tmp = mChildren.remove(j);  | 
| 529 | 555 | 
    tmp.mParent = null;  | 
| 556 | 
    tmp.mSurfaceParent = null;  | 
|
| 530 | 557 | 
    }  | 
| 531 | 558 | 
     | 
| 532 | 559 | 
    mNumChildren[0] = 0;  | 
| 533 | 560 | 
    }  | 
| 534 | 561 | 
    break;  | 
| 535 | 
    case SORT : numSorts++;  | 
|
| 536 | 
    // TODO: sort  | 
|
| 562 | 
    case SORT : job.node.mPostprocess = job.dep;  | 
|
| 563 | 
    mChildren.remove(job.node);  | 
|
| 564 | 
    DistortedMaster.addSorted(mChildren,job.node);  | 
|
| 537 | 565 | 
    break;  | 
| 538 | 566 | 
    }  | 
| 539 | 567 | 
    }  | 
| 540 | 568 | 
     | 
| 541 | 
    if( numChanges>0 )  | 
|
| 542 | 
          {
   | 
|
| 543 | 
    adjustIsomorphism();  | 
|
| 544 | 
     | 
|
| 545 | 
    if( numSorts==0 )  | 
|
| 546 | 
            {
   | 
|
| 547 | 
    // TODO: sort  | 
|
| 548 | 
    }  | 
|
| 549 | 
    }  | 
|
| 569 | 
    if( numChanges>0 ) adjustIsomorphism();  | 
|
| 550 | 570 | 
    }  | 
| 551 | 571 | 
    ///////////////////////////////////////////////////////////////////////////////////////////////////  | 
| 552 | 572 | 
    /**  | 
| ... | ... | |
| 561 | 581 | 
    */  | 
| 562 | 582 | 
    public void setPostprocessEffects(DistortedEffectsPostprocess dep)  | 
| 563 | 583 | 
        {
   | 
| 564 | 
    mPostprocess = dep;  | 
|
| 565 | 
     | 
|
| 566 | 
    // TODO: rearrange all the siblings so that all are sorted by the DistortedEffectsPostprocess' ID.  | 
|
| 584 | 
    if( mParent!=null )  | 
|
| 585 | 
          {
   | 
|
| 586 | 
    mParent.newJob(SORT, this, dep);  | 
|
| 587 | 
    DistortedMaster.newSlave(mParent);  | 
|
| 588 | 
    }  | 
|
| 589 | 
    else if( mSurfaceParent!=null )  | 
|
| 590 | 
          {
   | 
|
| 591 | 
    mSurfaceParent.newJob(SORT, this, dep);  | 
|
| 592 | 
    DistortedMaster.newSlave(mSurfaceParent);  | 
|
| 593 | 
    }  | 
|
| 594 | 
    else  | 
|
| 595 | 
          {
   | 
|
| 596 | 
    mPostprocess = dep;  | 
|
| 597 | 
    }  | 
|
| 567 | 598 | 
    }  | 
| 568 | 599 | 
     | 
| 569 | 600 | 
    ///////////////////////////////////////////////////////////////////////////////////////////////////  | 
| src/main/java/org/distorted/library/DistortedOutputSurface.java | ||
|---|---|---|
| 39 | 39 | 
        {
   | 
| 40 | 40 | 
    int type;  | 
| 41 | 41 | 
    DistortedNode node;  | 
| 42 | 
    DistortedEffectsPostprocess dep;  | 
|
| 42 | 43 | 
     | 
| 43 | 
    Job(int t, DistortedNode n)  | 
|
| 44 | 
        Job(int t, DistortedNode n, DistortedEffectsPostprocess d)
   | 
|
| 44 | 45 | 
          {
   | 
| 45 | 46 | 
    type = t;  | 
| 46 | 47 | 
    node = n;  | 
| 48 | 
    dep = d;  | 
|
| 47 | 49 | 
    }  | 
| 48 | 50 | 
    }  | 
| 49 | 51 | 
     | 
| ... | ... | |
| 63 | 65 | 
     | 
| 64 | 66 | 
    private float mClearR, mClearG, mClearB, mClearA;  | 
| 65 | 67 | 
    private float mClearDepth;  | 
| 66 | 
     | 
|
| 68 | 
    /*  | 
|
| 69 | 
    private String sNew="", sOld="";  | 
|
| 70 | 
    */  | 
|
| 67 | 71 | 
    ///////////////////////////////////////////////////////////////////////////////////////////////////  | 
| 68 | 72 | 
     | 
| 69 | 73 | 
    DistortedOutputSurface(int width, int height, int createColor, int createDepth, int fbo, int type)  | 
| ... | ... | |
| 96 | 100 | 
     | 
| 97 | 101 | 
    ///////////////////////////////////////////////////////////////////////////////////////////////////  | 
| 98 | 102 | 
     | 
| 99 | 
    void createProjection()  | 
|
| 103 | 
      private void createProjection()
   | 
|
| 100 | 104 | 
        {
   | 
| 101 | 105 | 
    if( mWidth>0 && mHeight>1 )  | 
| 102 | 106 | 
          {
   | 
| ... | ... | |
| 145 | 149 | 
    DistortedNode child;  | 
| 146 | 150 | 
    DistortedEffectsPostprocess lastP=null, currP;  | 
| 147 | 151 | 
    long lastB=0, currB;  | 
| 148 | 
     | 
|
| 152 | 
    /*  | 
|
| 153 | 
    sNew = "";  | 
|
| 154 | 
    */  | 
|
| 149 | 155 | 
    for(int i=0; i<num; i++)  | 
| 150 | 156 | 
          {
   | 
| 151 | 157 | 
    child = children.get(i);  | 
| 152 | 158 | 
    currP = child.getEffectsPostprocess();  | 
| 153 | 159 | 
    currB = currP==null ? 0 : currP.getBucket();  | 
| 154 | 
     | 
|
| 160 | 
    /*  | 
|
| 161 | 
    sNew += currB;  | 
|
| 162 | 
    */  | 
|
| 155 | 163 | 
    if( lastB!=currB && lastB!=0 )  | 
| 156 | 164 | 
            {
   | 
| 157 | 165 | 
    numRenders += lastP.postprocess(time,this);  | 
| ... | ... | |
| 179 | 187 | 
    lastP = currP;  | 
| 180 | 188 | 
    lastB = currB;  | 
| 181 | 189 | 
    }  | 
| 182 | 
     | 
|
| 190 | 
    /*  | 
|
| 191 | 
    if( !sNew.equals(sOld) )  | 
|
| 192 | 
      {
   | 
|
| 193 | 
    sOld = sNew;  | 
|
| 194 | 
      android.util.Log.e("surface", "Surface"+getID()+": "+sOld);
   | 
|
| 195 | 
    }  | 
|
| 196 | 
    */  | 
|
| 183 | 197 | 
    return numRenders;  | 
| 184 | 198 | 
    }  | 
| 185 | 199 | 
     | 
| 200 | 
    ///////////////////////////////////////////////////////////////////////////////////////////////////  | 
|
| 201 | 
     | 
|
| 202 | 
    void newJob(int t, DistortedNode n, DistortedEffectsPostprocess d)  | 
|
| 203 | 
        {
   | 
|
| 204 | 
    mJobs.add(new Job(t,n,d));  | 
|
| 205 | 
    }  | 
|
| 206 | 
     | 
|
| 186 | 207 | 
    ///////////////////////////////////////////////////////////////////////////////////////////////////  | 
| 187 | 208 | 
    // PUBLIC API  | 
| 188 | 209 | 
    ///////////////////////////////////////////////////////////////////////////////////////////////////  | 
| ... | ... | |
| 399 | 420 | 
    */  | 
| 400 | 421 | 
    public void attach(DistortedNode node)  | 
| 401 | 422 | 
        {
   | 
| 402 | 
    mJobs.add(new Job(ATTACH,node));  | 
|
| 423 | 
        mJobs.add(new Job(ATTACH,node,null));
   | 
|
| 403 | 424 | 
    DistortedMaster.newSlave(this);  | 
| 404 | 425 | 
    }  | 
| 405 | 426 | 
     | 
| ... | ... | |
| 418 | 439 | 
    public DistortedNode attach(DistortedInputSurface surface, DistortedEffects effects, MeshObject mesh)  | 
| 419 | 440 | 
        {
   | 
| 420 | 441 | 
    DistortedNode node = new DistortedNode(surface,effects,mesh);  | 
| 421 | 
    mJobs.add(new Job(ATTACH,node));  | 
|
| 442 | 
        mJobs.add(new Job(ATTACH,node,null));
   | 
|
| 422 | 443 | 
    DistortedMaster.newSlave(this);  | 
| 423 | 444 | 
    return node;  | 
| 424 | 445 | 
    }  | 
| ... | ... | |
| 448 | 469 | 
    if( node.getEffects().getID()==id )  | 
| 449 | 470 | 
            {
   | 
| 450 | 471 | 
    detached = true;  | 
| 451 | 
    mJobs.add(new Job(DETACH,node));  | 
|
| 472 | 
            mJobs.add(new Job(DETACH,node,null));
   | 
|
| 452 | 473 | 
    DistortedMaster.newSlave(this);  | 
| 453 | 474 | 
    break;  | 
| 454 | 475 | 
    }  | 
| ... | ... | |
| 485 | 506 | 
    */  | 
| 486 | 507 | 
    public void detach(DistortedNode node)  | 
| 487 | 508 | 
        {
   | 
| 488 | 
    mJobs.add(new Job(DETACH,node));  | 
|
| 509 | 
        mJobs.add(new Job(DETACH,node,null));
   | 
|
| 489 | 510 | 
    DistortedMaster.newSlave(this);  | 
| 490 | 511 | 
    }  | 
| 491 | 512 | 
     | 
| ... | ... | |
| 498 | 519 | 
    */  | 
| 499 | 520 | 
    public void detachAll()  | 
| 500 | 521 | 
        {
   | 
| 501 | 
    mJobs.add(new Job(DETALL,null));  | 
|
| 522 | 
        mJobs.add(new Job(DETALL,null,null));
   | 
|
| 502 | 523 | 
    DistortedMaster.newSlave(this);  | 
| 503 | 524 | 
    }  | 
| 504 | 525 | 
     | 
| ... | ... | |
| 515 | 536 | 
    int num = mJobs.size();  | 
| 516 | 537 | 
    Job job;  | 
| 517 | 538 | 
     | 
| 518 | 
    int numChanges=0;  | 
|
| 519 | 
    int numSorts =0;  | 
|
| 520 | 
     | 
|
| 521 | 539 | 
    for(int i=0; i<num; i++)  | 
| 522 | 540 | 
          {
   | 
| 523 | 541 | 
    job = mJobs.remove(0);  | 
| 524 | 542 | 
     | 
| 525 | 543 | 
    switch(job.type)  | 
| 526 | 544 | 
            {
   | 
| 527 | 
            case ATTACH: numChanges++;
   | 
|
| 528 | 
                         if( mChildren==null ) mChildren = new ArrayList<>(2);
   | 
|
| 529 | 
                         mChildren.add(job.node);
   | 
|
| 545 | 
            case ATTACH: if( mChildren==null ) mChildren = new ArrayList<>(2);
   | 
|
| 546 | 
                         job.node.setSurfaceParent(this);
   | 
|
| 547 | 
                         DistortedMaster.addSorted(mChildren,job.node);
   | 
|
| 530 | 548 | 
    mNumChildren++;  | 
| 531 | 549 | 
    break;  | 
| 532 | 
    case DETACH: numChanges++;  | 
|
| 533 | 
    if( mNumChildren>0 && mChildren.remove(job.node) )  | 
|
| 550 | 
    case DETACH: if( mNumChildren>0 && mChildren.remove(job.node) )  | 
|
| 534 | 551 | 
                           {
   | 
| 552 | 
    job.node.setSurfaceParent(null);  | 
|
| 535 | 553 | 
    mNumChildren--;  | 
| 536 | 554 | 
    }  | 
| 537 | 555 | 
    break;  | 
| 538 | 
    case DETALL: numChanges++;  | 
|
| 539 | 
    if( mNumChildren>0 )  | 
|
| 556 | 
    case DETALL: if( mNumChildren>0 )  | 
|
| 540 | 557 | 
                           {
   | 
| 558 | 
    DistortedNode tmp;  | 
|
| 559 | 
     | 
|
| 560 | 
    for(int j=mNumChildren-1; j>=0; j--)  | 
|
| 561 | 
                             {
   | 
|
| 562 | 
    tmp = mChildren.remove(j);  | 
|
| 563 | 
    tmp.setSurfaceParent(null);  | 
|
| 564 | 
    }  | 
|
| 565 | 
     | 
|
| 541 | 566 | 
    mNumChildren = 0;  | 
| 542 | 
    mChildren.clear();  | 
|
| 543 | 567 | 
    }  | 
| 544 | 568 | 
    break;  | 
| 545 | 
    case SORT : numSorts++;  | 
|
| 546 | 
    // TODO: sort  | 
|
| 569 | 
    case SORT : job.node.setPost(job.dep);  | 
|
| 570 | 
    mChildren.remove(job.node);  | 
|
| 571 | 
    DistortedMaster.addSorted(mChildren,job.node);  | 
|
| 547 | 572 | 
    break;  | 
| 548 | 573 | 
    }  | 
| 549 | 574 | 
    }  | 
| 550 | 
     | 
|
| 551 | 
    if( numChanges>0 && numSorts==0 )  | 
|
| 552 | 
          {
   | 
|
| 553 | 
    // TODO: sort  | 
|
| 554 | 
    }  | 
|
| 555 | 575 | 
    }  | 
| 556 | 576 | 
    }  | 
Also available in: Unified diff
Children now properly sorted into Postprocessing Buckets.