Revision de77a6c5
Added by Leszek Koltunski over 3 years ago
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
Introduce another Uniform Block Object. Now we can have much more vertex and fragment effects - up their default number to 100.