Project

General

Profile

« Previous | Next » 

Revision de77a6c5

Added by Leszek Koltunski over 3 years ago

Introduce another Uniform Block Object. Now we can have much more vertex and fragment effects - up their default number to 100.

View differences:

src/main/java/org/distorted/library/effectqueue/EffectQueueFragment.java
34 34

  
35 35
  private static final int INDEX = EffectType.FRAGMENT.ordinal();
36 36

  
37
  private final static int[] mNumEffectsH   = new int[MAIN_VARIANTS];
38
  private final static int[] mUniformsH     = new int[MAIN_VARIANTS];
39
  private final static int[] mPropBlockIndex= new int[MAIN_VARIANTS];
37
  private final static int[] mNumEffectsH  = new int[MAIN_VARIANTS];
38
  private final static int[] mIntBlockIndex= new int[MAIN_VARIANTS];
39
  private final static int[] mFloBlockIndex= new int[MAIN_VARIANTS];
40 40

  
41 41
///////////////////////////////////////////////////////////////////////////////////////////////////
42 42
   
......
56 56

  
57 57
  static void uniforms(int mProgramH, int variant)
58 58
    {
59
    mNumEffectsH[variant]    = GLES30.glGetUniformLocation  ( mProgramH, "fNumEffects");
60
    mUniformsH[variant]      = GLES30.glGetUniformLocation  ( mProgramH, "fUniforms");
61
    mPropBlockIndex[variant] = GLES30.glGetUniformBlockIndex( mProgramH, "fUniformProperties");
59
    mNumEffectsH[variant]   = GLES30.glGetUniformLocation  ( mProgramH, "fNumEffects");
60
    mIntBlockIndex[variant] = GLES30.glGetUniformBlockIndex( mProgramH, "fUniformProperties");
61
    mFloBlockIndex[variant] = GLES30.glGetUniformBlockIndex( mProgramH, "fUniformFloats");
62 62
    }
63 63

  
64 64
///////////////////////////////////////////////////////////////////////////////////////////////////
......
67 67
    { 
68 68
    if( currTime==mTime ) return;
69 69
    if( mTime==0 ) mTime = currTime;
70
    long step = (currTime-mTime);
71 70

  
72
    for(int i=0; i<mNumEffects; i++)
71
    if( mNumEffects>0 )
73 72
      {
74
      if( mEffects[i].compute(mFloatUniforms, NUM_FLOAT_UNIFORMS*i, currTime, step) )
73
      long step = (currTime-mTime);
74
      float[] array = mUBF.getBackingArray();
75

  
76
      for(int i=0; i<mNumEffects; i++)
75 77
        {
76
        EffectMessageSender.newMessage(mEffects[i]);
78
        if( mEffects[i].compute(array, NUM_FLOAT_UNIFORMS*i, currTime, step) )
79
          {
80
          EffectMessageSender.newMessage(mEffects[i]);
81
          }
77 82
        }
83

  
84
      mUBF.invalidate();
78 85
      }
79 86

  
80 87
    mTime = currTime;  
......
88 95

  
89 96
    if( mNumEffects>0 )
90 97
      {
91
      int index = mUBP.getIndex();
92
      GLES30.glBindBufferBase(GLES30.GL_UNIFORM_BUFFER, PROP_FRAG_UBO_BINDING, index);
93
      GLES30.glUniformBlockBinding(programH, mPropBlockIndex[variant], PROP_FRAG_UBO_BINDING);
94
      GLES30.glUniform4fv( mUniformsH[variant],(NUM_FLOAT_UNIFORMS/4)*mNumEffects, mFloatUniforms, 0);
98
      GLES30.glBindBufferBase(GLES30.GL_UNIFORM_BUFFER, FRAG_INT_UBO_BINDING, mUBI.getIndex());
99
      GLES30.glUniformBlockBinding(programH, mIntBlockIndex[variant], FRAG_INT_UBO_BINDING);
100

  
101
      GLES30.glBindBufferBase(GLES30.GL_UNIFORM_BUFFER, FRAG_FLO_UBO_BINDING, mUBF.getIndex());
102
      GLES30.glUniformBlockBinding(programH, mFloBlockIndex[variant], FRAG_FLO_UBO_BINDING);
95 103
      }  
96 104
    }
97 105
  }

Also available in: Unified diff