Revision 4fde55a0
Added by Leszek Koltunski over 7 years ago
src/main/java/org/distorted/library/EffectQueueVertex.java | ||
---|---|---|
39 | 39 |
|
40 | 40 |
class EffectQueueVertex extends EffectQueue |
41 | 41 |
{ |
42 |
private static final int NUM_UNIFORMS = 9;
|
|
42 |
private static final int NUM_UNIFORMS = 12;
|
|
43 | 43 |
private static final int INDEX = EffectTypes.VERTEX.ordinal(); |
44 | 44 |
private static int mNumEffectsH; |
45 | 45 |
private static int mTypeH; |
... | ... | |
90 | 90 |
else mInter[0][i] = null; |
91 | 91 |
} |
92 | 92 |
|
93 |
if( mInter[1][i]!=null ) |
|
93 |
if( mInter[1][i]!=null ) // region
|
|
94 | 94 |
{ |
95 |
mInter[1][i].interpolateMain(mUniforms, NUM_UNIFORMS*i+3, mCurrentDuration[i]);
|
|
95 |
mInter[1][i].interpolateMain(mUniforms, NUM_UNIFORMS*i+8, mCurrentDuration[i]);
|
|
96 | 96 |
} |
97 | 97 |
|
98 |
if( mInter[2][i]!=null ) |
|
98 |
if( mInter[2][i]!=null ) // center
|
|
99 | 99 |
{ |
100 |
mInter[2][i].interpolateMain(mUniforms, NUM_UNIFORMS*i+7, mCurrentDuration[i]);
|
|
100 |
mInter[2][i].interpolateMain(mUniforms, NUM_UNIFORMS*i+6, mCurrentDuration[i]);
|
|
101 | 101 |
|
102 |
mUniforms[NUM_UNIFORMS*i+7] = mUniforms[NUM_UNIFORMS*i+7]-mObjHalfX;
|
|
103 |
mUniforms[NUM_UNIFORMS*i+8] =-mUniforms[NUM_UNIFORMS*i+8]+mObjHalfY;
|
|
102 |
mUniforms[NUM_UNIFORMS*i+6] = mUniforms[NUM_UNIFORMS*i+6]-mObjHalfX;
|
|
103 |
mUniforms[NUM_UNIFORMS*i+7] =-mUniforms[NUM_UNIFORMS*i+7]+mObjHalfY;
|
|
104 | 104 |
} |
105 | 105 |
|
106 | 106 |
mCurrentDuration[i] += step; |
... | ... | |
113 | 113 |
|
114 | 114 |
protected void moveEffect(int index) |
115 | 115 |
{ |
116 |
mUniforms[NUM_UNIFORMS*index ] = mUniforms[NUM_UNIFORMS*(index+1) ]; |
|
117 |
mUniforms[NUM_UNIFORMS*index+1] = mUniforms[NUM_UNIFORMS*(index+1)+1]; |
|
118 |
mUniforms[NUM_UNIFORMS*index+2] = mUniforms[NUM_UNIFORMS*(index+1)+2]; |
|
119 |
mUniforms[NUM_UNIFORMS*index+3] = mUniforms[NUM_UNIFORMS*(index+1)+3]; |
|
120 |
mUniforms[NUM_UNIFORMS*index+4] = mUniforms[NUM_UNIFORMS*(index+1)+4]; |
|
121 |
mUniforms[NUM_UNIFORMS*index+5] = mUniforms[NUM_UNIFORMS*(index+1)+5]; |
|
122 |
mUniforms[NUM_UNIFORMS*index+6] = mUniforms[NUM_UNIFORMS*(index+1)+6]; |
|
123 |
mUniforms[NUM_UNIFORMS*index+7] = mUniforms[NUM_UNIFORMS*(index+1)+7]; |
|
124 |
mUniforms[NUM_UNIFORMS*index+8] = mUniforms[NUM_UNIFORMS*(index+1)+8]; |
|
116 |
mUniforms[NUM_UNIFORMS*index ] = mUniforms[NUM_UNIFORMS*(index+1) ]; |
|
117 |
mUniforms[NUM_UNIFORMS*index+ 1] = mUniforms[NUM_UNIFORMS*(index+1)+ 1]; |
|
118 |
mUniforms[NUM_UNIFORMS*index+ 2] = mUniforms[NUM_UNIFORMS*(index+1)+ 2]; |
|
119 |
mUniforms[NUM_UNIFORMS*index+ 3] = mUniforms[NUM_UNIFORMS*(index+1)+ 3]; |
|
120 |
mUniforms[NUM_UNIFORMS*index+ 4] = mUniforms[NUM_UNIFORMS*(index+1)+ 4]; |
|
121 |
mUniforms[NUM_UNIFORMS*index+ 5] = mUniforms[NUM_UNIFORMS*(index+1)+ 5]; |
|
122 |
mUniforms[NUM_UNIFORMS*index+ 6] = mUniforms[NUM_UNIFORMS*(index+1)+ 6]; |
|
123 |
mUniforms[NUM_UNIFORMS*index+ 7] = mUniforms[NUM_UNIFORMS*(index+1)+ 7]; |
|
124 |
mUniforms[NUM_UNIFORMS*index+ 8] = mUniforms[NUM_UNIFORMS*(index+1)+ 8]; |
|
125 |
mUniforms[NUM_UNIFORMS*index+ 9] = mUniforms[NUM_UNIFORMS*(index+1)+ 9]; |
|
126 |
mUniforms[NUM_UNIFORMS*index+10] = mUniforms[NUM_UNIFORMS*(index+1)+10]; |
|
127 |
mUniforms[NUM_UNIFORMS*index+11] = mUniforms[NUM_UNIFORMS*(index+1)+11]; |
|
125 | 128 |
} |
126 | 129 |
|
127 | 130 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
... | ... | |
132 | 135 |
|
133 | 136 |
if( mNumEffects>0 ) |
134 | 137 |
{ |
135 |
GLES20.glUniform1iv( mTypeH , mNumEffects, mName,0); |
|
136 |
GLES20.glUniform3fv( mUniformsH,3*mNumEffects, mUniforms,0);
|
|
138 |
GLES20.glUniform1iv( mTypeH , mNumEffects, mName ,0);
|
|
139 |
GLES20.glUniform4fv( mUniformsH,3*mNumEffects, mUniforms,0);
|
|
137 | 140 |
} |
138 | 141 |
} |
139 | 142 |
|
... | ... | |
148 | 151 |
// Do various post-processing on already computed effects. |
149 | 152 |
// 1) here unlike in the fragment queue, we don't have to multiply the points by ModelView matrix because that gets done in the shader. |
150 | 153 |
// 2) in case of swirl, pre-compute the sine and cosine of its rotation angle |
154 |
// 3) likewise in case of wave |
|
151 | 155 |
|
152 | 156 |
void postprocess() |
153 | 157 |
{ |
... | ... | |
158 | 162 |
if( mName[i]==EffectNames.SWIRL.ordinal() ) |
159 | 163 |
{ |
160 | 164 |
d = Math.PI*mUniforms[NUM_UNIFORMS*i]/180; |
161 |
mUniforms[NUM_UNIFORMS*i+1] = (float)Math.sin(d); |
|
162 |
mUniforms[NUM_UNIFORMS*i+2] = (float)Math.cos(d); |
|
165 |
mUniforms[NUM_UNIFORMS*i+4] = (float)Math.sin(d); |
|
166 |
mUniforms[NUM_UNIFORMS*i+5] = (float)Math.cos(d); |
|
167 |
} |
|
168 |
if( mName[i]==EffectNames.WAVE.ordinal() ) |
|
169 |
{ |
|
170 |
d = Math.PI*mUniforms[NUM_UNIFORMS*i+1]/180; |
|
171 |
mUniforms[NUM_UNIFORMS*i+4] = (float)Math.sin(d); |
|
172 |
mUniforms[NUM_UNIFORMS*i+5] = (float)Math.cos(d); |
|
163 | 173 |
} |
164 | 174 |
} |
165 | 175 |
} |
166 | 176 |
|
167 | 177 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
168 |
// distort |
|
178 |
// distort, wave
|
|
169 | 179 |
|
170 | 180 |
synchronized long add(EffectNames eln, Data3D data, Data2D center, Data4D region) |
171 | 181 |
{ |
... | ... | |
190 | 200 |
} |
191 | 201 |
|
192 | 202 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
193 |
// deform, distort |
|
203 |
// deform, distort, wave
|
|
194 | 204 |
|
195 | 205 |
synchronized long add(EffectNames eln, Data3D data, Data2D center) |
196 | 206 |
{ |
... | ... | |
276 | 286 |
|
277 | 287 |
float z = tmp.getZ(); |
278 | 288 |
|
279 |
mUniforms[NUM_UNIFORMS*mNumEffects+3] = tmp.getX();
|
|
280 |
mUniforms[NUM_UNIFORMS*mNumEffects+4] =-tmp.getY(); // invert y already
|
|
281 |
mUniforms[NUM_UNIFORMS*mNumEffects+5] = z<=0.0f ? 1000*mObjHalfX : z;
|
|
282 |
mUniforms[NUM_UNIFORMS*mNumEffects+6] = tmp.getW();
|
|
289 |
mUniforms[NUM_UNIFORMS*mNumEffects+ 8] = tmp.getX();
|
|
290 |
mUniforms[NUM_UNIFORMS*mNumEffects+ 9] =-tmp.getY(); // invert y already
|
|
291 |
mUniforms[NUM_UNIFORMS*mNumEffects+10] = z<=0.0f ? 1000*mObjHalfX : z;
|
|
292 |
mUniforms[NUM_UNIFORMS*mNumEffects+11] = tmp.getW();
|
|
283 | 293 |
mInter[1][mNumEffects] = null; |
284 | 294 |
} |
285 | 295 |
else return -1; |
286 | 296 |
} |
287 | 297 |
else |
288 | 298 |
{ |
289 |
mUniforms[NUM_UNIFORMS*mNumEffects+3] = 0.0f;
|
|
290 |
mUniforms[NUM_UNIFORMS*mNumEffects+4] = 0.0f;
|
|
291 |
mUniforms[NUM_UNIFORMS*mNumEffects+5] = 1000*mObjHalfX;
|
|
292 |
mUniforms[NUM_UNIFORMS*mNumEffects+6] = 0.0f;
|
|
299 |
mUniforms[NUM_UNIFORMS*mNumEffects+ 8] = 0.0f;
|
|
300 |
mUniforms[NUM_UNIFORMS*mNumEffects+ 9] = 0.0f;
|
|
301 |
mUniforms[NUM_UNIFORMS*mNumEffects+10] = 1000*mObjHalfX;
|
|
302 |
mUniforms[NUM_UNIFORMS*mNumEffects+11] = 0.0f;
|
|
293 | 303 |
mInter[1][mNumEffects] = null; |
294 | 304 |
} |
295 | 305 |
|
... | ... | |
298 | 308 |
else if( center instanceof Static2D) |
299 | 309 |
{ |
300 | 310 |
mInter[2][mNumEffects] = null; |
301 |
mUniforms[NUM_UNIFORMS*mNumEffects+7] = ((Static2D)center).getX()-mObjHalfX;
|
|
302 |
mUniforms[NUM_UNIFORMS*mNumEffects+8] =-((Static2D)center).getY()+mObjHalfY;
|
|
311 |
mUniforms[NUM_UNIFORMS*mNumEffects+6] = ((Static2D)center).getX()-mObjHalfX;
|
|
312 |
mUniforms[NUM_UNIFORMS*mNumEffects+7] =-((Static2D)center).getY()+mObjHalfY;
|
|
303 | 313 |
} |
304 | 314 |
|
305 | 315 |
return addBase(eln); |
Also available in: Unified diff
Beginnings of the WAVE effect.