Project

General

Profile

« Previous | Next » 

Revision 2b7d2abb

Added by Leszek Koltunski over 3 years ago

Remove UBO from the fragment shader and come back to the default of only 5 concurrent fragment effects. All because UBOs in fragment shader crash on Adreno 510 and Adreno 506.

View differences:

src/main/java/org/distorted/library/effectqueue/EffectQueueFragment.java
31 31
  {
32 32
  private static final int NUM_FLOAT_UNIFORMS = FragmentEffect.NUM_FLOAT_UNIFORMS;
33 33
  private static final int NUM_INT_UNIFORMS   = FragmentEffect.NUM_INT_UNIFORMS;
34

  
34
  private static final boolean USE_UBO        = false;
35 35
  private static final int INDEX = EffectType.FRAGMENT.ordinal();
36 36

  
37 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];
38
  private final static int[] mIntUniformsH = new int[MAIN_VARIANTS];
39
  private final static int[] mFloUniformsH = new int[MAIN_VARIANTS];
40 40

  
41 41
///////////////////////////////////////////////////////////////////////////////////////////////////
42 42
   
43 43
  EffectQueueFragment()
44 44
    { 
45
    super(NUM_FLOAT_UNIFORMS, NUM_INT_UNIFORMS, INDEX);
45
    super(NUM_FLOAT_UNIFORMS, NUM_INT_UNIFORMS, USE_UBO, INDEX);
46 46
    }
47 47

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

  
64 64
///////////////////////////////////////////////////////////////////////////////////////////////////
......
80 80
          EffectMessageSender.newMessage(mEffects[i]);
81 81
          }
82 82
        }
83

  
84
      mUBF.invalidate();
85 83
      }
86 84

  
87 85
    mTime = currTime;  
......
95 93

  
96 94
    if( mNumEffects>0 )
97 95
      {
98
      GLES30.glBindBufferBase(GLES30.GL_UNIFORM_BUFFER, FRAG_INT_UBO_BINDING, mUBI.getIndex());
99
      GLES30.glUniformBlockBinding(programH, mIntBlockIndex[variant], FRAG_INT_UBO_BINDING);
96
      int[]   arrayI = mUBI.getBackingArray();
97
      float[] arrayF = mUBF.getBackingArray();
100 98

  
101
      GLES30.glBindBufferBase(GLES30.GL_UNIFORM_BUFFER, FRAG_FLO_UBO_BINDING, mUBF.getIndex());
102
      GLES30.glUniformBlockBinding(programH, mFloBlockIndex[variant], FRAG_FLO_UBO_BINDING);
99
      GLES30.glUniform4iv( mIntUniformsH[variant],                       mNumEffects, arrayI, 0);
100
      GLES30.glUniform4fv( mFloUniformsH[variant],(NUM_FLOAT_UNIFORMS/4)*mNumEffects, arrayF, 0);
103 101
      }  
104 102
    }
105 103
  }

Also available in: Unified diff