Project

General

Profile

« Previous | Next » 

Revision a0397f32

Added by Leszek Koltunski about 5 years ago

Make DistortedEffects oblivious of the effect types.

View differences:

src/main/java/org/distorted/library/main/DistortedEffects.java
131 131
  private static long mNextID =0;
132 132
  private long mID;
133 133

  
134
  private EffectQueueMatrix mM;
135
  private EffectQueueFragment mF;
136
  private EffectQueueVertex mV;
137
  private EffectQueuePostprocess mP;
138

  
139
  private boolean matrixCloned, vertexCloned, fragmentCloned, postprocessCloned;
134
  private EffectQueue[] mQueues;
140 135

  
141 136
///////////////////////////////////////////////////////////////////////////////////////////////////
142 137

  
......
154 149
    String enabledEffectV= VertexEffect.getGLSL();
155 150
    String enabledEffectF= FragmentEffect.getGLSL();
156 151

  
157
    //android.util.Log.e("Effects", "vertHeader= "+mainVertHeader);
158
    //android.util.Log.e("Effects", "fragHeader= "+mainFragHeader);
159
    //android.util.Log.e("Effects", "enabledV= "+enabledEffectV);
160
    //android.util.Log.e("Effects", "enabledF= "+enabledEffectF);
161

  
162 152
    String[] feedback = { "v_Position", "v_endPosition" };
163 153

  
164 154
    try
......
173 163
      }
174 164

  
175 165
    int mainProgramH = mMainProgram.getProgramHandle();
176
    EffectQueueFragment.getUniforms(mainProgramH,0);
177
    EffectQueueVertex.getUniforms(mainProgramH,0);
178
    EffectQueueMatrix.getUniforms(mainProgramH,0);
166
    EffectQueue.getUniforms(mainProgramH,0);
179 167
    mMainTextureH= GLES31.glGetUniformLocation( mainProgramH, "u_Texture");
180 168

  
181 169
    // BLIT PROGRAM ////////////////////////////////////
......
267 255
      }
268 256

  
269 257
    int mainOITProgramH = mMainOITProgram.getProgramHandle();
270
    EffectQueueFragment.getUniforms(mainOITProgramH,1);
271
    EffectQueueVertex.getUniforms(mainOITProgramH,1);
272
    EffectQueueMatrix.getUniforms(mainOITProgramH,1);
258
    EffectQueue.getUniforms(mainOITProgramH,1);
273 259
    mMainOITTextureH    = GLES31.glGetUniformLocation( mainOITProgramH, "u_Texture");
274 260
    mMainOITSizeH       = GLES31.glGetUniformLocation( mainOITProgramH, "u_Size");
275 261
    mMainOITNumRecordsH = GLES31.glGetUniformLocation( mainOITProgramH, "u_numRecords");
......
357 343

  
358 344
///////////////////////////////////////////////////////////////////////////////////////////////////
359 345

  
360
  private void initializeEffectLists(DistortedEffects d, int flags)
346
  EffectQueue[] getQueues()
361 347
    {
362
    if( (flags & Distorted.CLONE_MATRIX) != 0 )
363
      {
364
      mM = d.mM;
365
      matrixCloned = true;
366
      }
367
    else
368
      {
369
      mM = new EffectQueueMatrix(mID);
370
      matrixCloned = false;
371
      }
372
    
373
    if( (flags & Distorted.CLONE_VERTEX) != 0 )
374
      {
375
      mV = d.mV;
376
      vertexCloned = true;
377
      }
378
    else
379
      {
380
      mV = new EffectQueueVertex(mID);
381
      vertexCloned = false;
382
      }
383
    
384
    if( (flags & Distorted.CLONE_FRAGMENT) != 0 )
385
      {
386
      mF = d.mF;
387
      fragmentCloned = true;
388
      }
389
    else
390
      {
391
      mF = new EffectQueueFragment(mID);
392
      fragmentCloned = false;
393
      }
394

  
395
    if( (flags & Distorted.CLONE_POSTPROCESS) != 0 )
396
      {
397
      mP = d.mP;
398
      postprocessCloned = true;
399
      }
400
    else
401
      {
402
      mP = new EffectQueuePostprocess(mID);
403
      postprocessCloned = false;
404
      }
405
    }
406
///////////////////////////////////////////////////////////////////////////////////////////////////
407

  
408
  EffectQueueMatrix getMatrix()
409
    {
410
    return mM;
411
    }
412

  
413
///////////////////////////////////////////////////////////////////////////////////////////////////
414

  
415
  EffectQueueVertex getVertex()
416
    {
417
    return mV;
418
    }
419

  
420
///////////////////////////////////////////////////////////////////////////////////////////////////
421

  
422
  EffectQueueFragment getFragment()
423
    {
424
    return mF;
425
    }
426

  
427
///////////////////////////////////////////////////////////////////////////////////////////////////
428

  
429
  EffectQueuePostprocess getPostprocess()
430
    {
431
    return mP;
348
    return mQueues;
432 349
    }
433 350

  
434 351
///////////////////////////////////////////////////////////////////////////////////////////////////
435 352

  
436 353
  void newNode(DistortedNode node)
437 354
    {
438
    mP.newNode(node);
355
    EffectQueue.newNode(mQueues,node);
439 356
    }
440 357

  
441 358
///////////////////////////////////////////////////////////////////////////////////////////////////
442 359

  
443 360
  void removeNode(DistortedNode node)
444 361
    {
445
    mP.removeNode(node);
362
    EffectQueue.removeNode(mQueues,node);
446 363
    }
447 364

  
448 365
///////////////////////////////////////////////////////////////////////////////////////////////////
......
461 378
    GLES31.glBindBufferBase(GLES31.GL_TRANSFORM_FEEDBACK_BUFFER, 0, 0);
462 379

  
463 380
    mNormalProgram.useProgram();
464
    GLES31.glUniformMatrix4fv(mNormalMVPMatrixH, 1, false, mM.getMVP() , 0);
381
    GLES31.glUniformMatrix4fv(mNormalMVPMatrixH, 1, false, EffectQueue.getMVP(mQueues) , 0);
465 382
    mesh.bindTransformAttribs(mNormalProgram);
466 383
    GLES31.glLineWidth(8.0f);
467 384
    GLES31.glDrawArrays(GLES31.GL_LINES, 0, 2*num);
......
473 390
    {
474 391
    float halfZ = halfW*mesh.getZFactor();
475 392

  
476
    mM.compute(currTime);
477
    mV.compute(currTime,halfW,halfH,halfZ);
478
    mF.compute(currTime,halfW,halfH,halfZ);
479
    mP.compute(currTime);
480

  
393
    EffectQueue.compute(mQueues, currTime, halfW, halfH, halfZ );
481 394
    GLES31.glViewport(0, 0, surface.mWidth, surface.mHeight );
482 395

  
483 396
    mMainOITProgram.useProgram();
......
489 402

  
490 403
    float inflate = mesh.getInflate();
491 404

  
492
    mM.send(surface,halfW,halfH,halfZ,1);
493
    mV.send(inflate,1);
494
    mF.send(1);
495

  
405
    EffectQueue.send(mQueues, surface, inflate, halfW, halfH, halfZ, 1 );
496 406
    GLES31.glDrawArrays(GLES31.GL_TRIANGLE_STRIP, 0, mesh.getNumVertices() );
497 407

  
498 408
    if( mesh.getShowNormals() )
499 409
      {
500 410
      mMainProgram.useProgram();
501
      mM.send(surface,halfW,halfH,halfZ,0);
502
      mV.send(inflate,0);
503
      mF.send(0);
411
      EffectQueue.send(mQueues, surface, inflate, halfW, halfH, halfZ, 0 );
504 412
      displayNormals(mesh);
505 413
      }
506 414
    }
......
511 419
    {
512 420
    float halfZ = halfW*mesh.getZFactor();
513 421

  
514
    mM.compute(currTime);
515
    mV.compute(currTime,halfW,halfH,halfZ);
516
    mF.compute(currTime,halfW,halfH,halfZ);
517
    mP.compute(currTime);
518

  
422
    EffectQueue.compute(mQueues, currTime, halfW, halfH, halfZ );
519 423
    GLES31.glViewport(0, 0, surface.mWidth, surface.mHeight );
520

  
521 424
    mMainProgram.useProgram();
522 425
    GLES31.glUniform1i(mMainTextureH, 0);
523

  
524 426
    mesh.bindVertexAttribs(mMainProgram);
525

  
526
    mM.send(surface,halfW,halfH,halfZ,0);
527
    mV.send( mesh.getInflate(),0);
528
    mF.send(0);
529

  
427
    EffectQueue.send(mQueues, surface, mesh.getInflate(), halfW, halfH, halfZ, 0 );
530 428
    GLES31.glDrawArrays(GLES31.GL_TRIANGLE_STRIP, 0, mesh.getNumVertices() );
531 429

  
532 430
    if( mesh.getShowNormals() ) displayNormals(mesh);
......
729 627
    GLES31.glDrawArrays(GLES31.GL_TRIANGLE_STRIP, 0, 4);
730 628
    }
731 629

  
732
///////////////////////////////////////////////////////////////////////////////////////////////////
733

  
734
  private void releasePriv()
735
    {
736
    if( !matrixCloned      ) mM.abortAll(false);
737
    if( !vertexCloned      ) mV.abortAll(false);
738
    if( !fragmentCloned    ) mF.abortAll(false);
739
    if( !postprocessCloned ) mP.abortAll(false);
740

  
741
    mM = null;
742
    mV = null;
743
    mF = null;
744
    mP = null;
745
    }
746

  
747 630
///////////////////////////////////////////////////////////////////////////////////////////////////
748 631

  
749 632
  static void onPause()
......
776 659
  public DistortedEffects()
777 660
    {
778 661
    mID = ++mNextID;
779
    initializeEffectLists(this,0);
662
    mQueues = new EffectQueue[EffectType.LENGTH];
663
    EffectQueue.allocateQueues(mQueues,null,0,mID);
780 664
    }
781 665

  
782 666
///////////////////////////////////////////////////////////////////////////////////////////////////
......
792 676
  public DistortedEffects(DistortedEffects dc, int flags)
793 677
    {
794 678
    mID = ++mNextID;
795
    initializeEffectLists(dc,flags);
796
    }
797

  
798
///////////////////////////////////////////////////////////////////////////////////////////////////
799
/**
800
 * Releases all resources. After this call, the queue should not be used anymore.
801
 */
802
  @SuppressWarnings("unused")
803
  public synchronized void delete()
804
    {
805
    releasePriv();
679
    mQueues = new EffectQueue[EffectType.LENGTH];
680
    EffectQueue.allocateQueues(mQueues,dc.getQueues(),flags,mID);
806 681
    }
807 682

  
808 683
///////////////////////////////////////////////////////////////////////////////////////////////////
......
826 701
  @SuppressWarnings("unused")
827 702
  public void registerForMessages(EffectListener el)
828 703
    {
829
    mM.registerForMessages(el);
830
    mV.registerForMessages(el);
831
    mF.registerForMessages(el);
832
    mP.registerForMessages(el);
704
    for( int i=0; i<EffectType.LENGTH; i++)
705
      {
706
      mQueues[i].registerForMessages(el);
707
      }
833 708
    }
834 709

  
835 710
///////////////////////////////////////////////////////////////////////////////////////////////////
......
841 716
  @SuppressWarnings("unused")
842 717
  public void deregisterForMessages(EffectListener el)
843 718
    {
844
    mM.deregisterForMessages(el);
845
    mV.deregisterForMessages(el);
846
    mF.deregisterForMessages(el);
847
    mP.deregisterForMessages(el);
719
    for( int i=0; i<EffectType.LENGTH; i++)
720
      {
721
      mQueues[i].deregisterForMessages(el);
722
      }
848 723
    }
849 724

  
850 725
///////////////////////////////////////////////////////////////////////////////////////////////////
......
854 729
 */
855 730
  public int abortAllEffects()
856 731
    {
857
    return mM.abortAll(true) + mV.abortAll(true) + mF.abortAll(true) + mP.abortAll(true);
732
    int aborted = 0;
733

  
734
    for( int i=0; i<EffectType.LENGTH; i++)
735
      {
736
      aborted += mQueues[i].abortAll(true);
737
      }
738

  
739
    return aborted;
858 740
    }
859 741

  
860 742
///////////////////////////////////////////////////////////////////////////////////////////////////
......
866 748
 */
867 749
  public int abortByType(EffectType type)
868 750
    {
869
    switch(type)
870
      {
871
      case MATRIX     : return mM.abortAll(true);
872
      case VERTEX     : return mV.abortAll(true);
873
      case FRAGMENT   : return mF.abortAll(true);
874
      case POSTPROCESS: return mP.abortAll(true);
875
      default         : return 0;
876
      }
751
    int num = type.ordinal();
752
    return mQueues[num].abortAll(true);
877 753
    }
878 754

  
879 755
///////////////////////////////////////////////////////////////////////////////////////////////////
......
885 761
 */
886 762
  public int abortById(long id)
887 763
    {
888
    long type = id&EffectType.MASK;
889

  
890
    if( type == EffectType.MATRIX.ordinal()      ) return mM.removeById(id);
891
    if( type == EffectType.VERTEX.ordinal()      ) return mV.removeById(id);
892
    if( type == EffectType.FRAGMENT.ordinal()    ) return mF.removeById(id);
893
    if( type == EffectType.POSTPROCESS.ordinal() ) return mP.removeById(id);
894

  
895
    return 0;
764
    int num = (int)(id&EffectType.MASK);
765
    return mQueues[num].removeById(id);
896 766
    }
897 767

  
898 768
///////////////////////////////////////////////////////////////////////////////////////////////////
......
904 774
 */
905 775
  public int abortEffect(Effect effect)
906 776
    {
907
    switch(effect.getType())
908
      {
909
      case MATRIX     : return mM.removeEffect(effect);
910
      case VERTEX     : return mV.removeEffect(effect);
911
      case FRAGMENT   : return mF.removeEffect(effect);
912
      case POSTPROCESS: return mP.removeEffect(effect);
913
      default         : return 0;
914
      }
777
    int num = effect.getType().ordinal();
778
    return mQueues[num].removeEffect(effect);
915 779
    }
916 780

  
917 781
///////////////////////////////////////////////////////////////////////////////////////////////////
......
923 787
 */
924 788
  public int abortByName(EffectName name)
925 789
    {
926
    switch(name.getType())
927
      {
928
      case MATRIX     : return mM.removeByName(name);
929
      case VERTEX     : return mV.removeByName(name);
930
      case FRAGMENT   : return mF.removeByName(name);
931
      case POSTPROCESS: return mP.removeByName(name);
932
      default                : return 0;
933
      }
790
    int num = name.getType().ordinal();
791
    return mQueues[num].removeByName(name);
934 792
    }
935 793

  
936 794
///////////////////////////////////////////////////////////////////////////////////////////////////
......
979 837
 */
980 838
  public boolean apply(Effect effect)
981 839
    {
982
    switch(effect.getType())
983
      {
984
      case MATRIX      : return mM.add(effect);
985
      case VERTEX      : return mV.add(effect);
986
      case FRAGMENT    : return mF.add(effect);
987
      case POSTPROCESS : return mP.add(effect);
988
      }
989

  
990
    return false;
840
    int num = effect.getType().ordinal();
841
    return mQueues[num].add(effect);
991 842
    }
992 843
  }

Also available in: Unified diff