Project

General

Profile

« Previous | Next » 

Revision 2fce34f4

Added by Leszek Koltunski almost 8 years ago

Major push towards simplifying DistortedObject's public API.
All Fragment effects are using the new API - the 'DataND' marker interfaces.

View differences:

src/main/java/org/distorted/library/EffectQueueFragment.java
22 22
import android.opengl.GLES20;
23 23

  
24 24
import org.distorted.library.message.EffectMessage;
25
import org.distorted.library.type.Data1D;
26
import org.distorted.library.type.Data4D;
25 27
import org.distorted.library.type.Dynamic1D;
28
import org.distorted.library.type.Dynamic4D;
29
import org.distorted.library.type.Static1D;
26 30
import org.distorted.library.type.Static2D;
27 31
import org.distorted.library.type.Static3D;
28 32
import org.distorted.library.type.Static4D;
......
33 37

  
34 38
class EffectQueueFragment extends EffectQueue
35 39
  {
36
  private static final int NUM_UNIFORMS = 9;
40
  private static final int NUM_UNIFORMS = 8;
37 41
  private static final int INDEX = EffectTypes.FRAGMENT.ordinal();
38 42
  private float[] mBuf;
39 43
  private static int mNumEffectsH;
......
123 127
    if( mNumEffects>0 )
124 128
      {     
125 129
      GLES20.glUniform1iv( mTypeH    ,  mNumEffects, mType    ,0);
126
      GLES20.glUniform3fv( mUniformsH,3*mNumEffects, mUniforms,0);
130
      GLES20.glUniform4fv( mUniformsH,2*mNumEffects, mUniforms,0);
127 131
      }  
128 132
    }
129 133

  
......
151 155
        {   
152 156
        tx = mBuf[4*i  ]-mObjHalfX; // we have to invert y and move everything by (half of bmp width, half of bmp height)
153 157
        ty =-mBuf[4*i+1]+mObjHalfY; //
154
      
155
        mUniforms[NUM_UNIFORMS*i+4] = w*mBuf[4*i+2];                                  // in fragment shader rx and ry radii are the second and third values of the Region thus 9*i+4 and 9*i+5
156
        mUniforms[NUM_UNIFORMS*i+5] = h*mBuf[4*i+3];                                  // 
157
     // mUniforms[NUM_UNIFORMS*i+6] =                                                 // this value is not used in Fragment Shader   
158
        mUniforms[NUM_UNIFORMS*i+7] = MVmatrix[0]*tx + MVmatrix[4]*ty + MVmatrix[12]; // multiply the ModelView matrix times the (x,y,0,1) point, i.e. the (x,y) point on the surface of the bitmap.
159
        mUniforms[NUM_UNIFORMS*i+8] = MVmatrix[1]*tx + MVmatrix[5]*ty + MVmatrix[13]; //  
160
        
158

  
159
        mUniforms[NUM_UNIFORMS*i+4] = MVmatrix[0]*tx + MVmatrix[4]*ty + MVmatrix[12]; // multiply the ModelView matrix times the (x,y,0,1) point, i.e. the (x,y) point on the surface of the bitmap.
160
        mUniforms[NUM_UNIFORMS*i+5] = MVmatrix[1]*tx + MVmatrix[5]*ty + MVmatrix[13]; //
161
        mUniforms[NUM_UNIFORMS*i+6] = w*mBuf[4*i+2];                                  // in fragment shader rx and ry radii are the last two values of the second vec4
162
        mUniforms[NUM_UNIFORMS*i+7] = h*mBuf[4*i+3];                                  //
163

  
161 164
        if( mType[i]==EffectNames.MACROBLOCK.ordinal() ) // fill up the .y and .z components of the Interpolated values already to avoid having to compute this in the fragment shader
162 165
          {
163 166
          mUniforms[NUM_UNIFORMS*i+1] = 2.0f*mObjHalfX/mUniforms[NUM_UNIFORMS*i];
......
168 171
    }
169 172
  
170 173
///////////////////////////////////////////////////////////////////////////////////////////////////
171
       
172
  synchronized long add(EffectNames eln, Dynamic inter, Static4D region, Dynamic2D point)
174
// macroblock, alpha, brightness, contrast, saturation
175

  
176
  synchronized long add(EffectNames eln, Data1D data)
173 177
    {
174 178
    if( mMax[INDEX]>mNumEffects )
175 179
      {
176 180
      EffectNames.fillWithUnities(eln.ordinal(), mUniforms, NUM_UNIFORMS*mNumEffects); 
177
      mInterI[mNumEffects] = inter;
178
      mInterP[mNumEffects] = point;
179 181

  
180
      if( region==null )
182
      if( data instanceof Dynamic1D)
183
        mInterI[mNumEffects] = (Dynamic1D)data;
184
      else if( data instanceof Static1D )
181 185
        {
182
        mBuf[4*mNumEffects+2] = 1000*mObjHalfX;
183
        mBuf[4*mNumEffects+3] = 1000*mObjHalfY;
186
        mInterI[mNumEffects] = null;
187
        mUniforms[NUM_UNIFORMS*mNumEffects] = ((Static1D)data).getX();
184 188
        }
185
      else
186
        {
187
        float z = region.getZ();
188
        float w = region.getW();
189
      else return -1;
189 190

  
190
        mBuf[4*mNumEffects+2] = z<=0.0f ? 1000*mObjHalfX : z;
191
        mBuf[4*mNumEffects+3] = w<=0.0f ? 1000*mObjHalfY : w;
192
        }
191
      mInterP[mNumEffects] = null;
192
      mBuf[4*mNumEffects+2] = 1000*mObjHalfX;
193
      mBuf[4*mNumEffects+3] = 1000*mObjHalfY;
193 194

  
194 195
      return addBase(eln); 
195 196
      }
......
198 199
    }
199 200
  
200 201
///////////////////////////////////////////////////////////////////////////////////////////////////
202
// macroblock, alpha, brightness, contrast, saturation
201 203

  
202
  synchronized long add(EffectNames eln, Dynamic inter, Static4D region, Static2D point)
204
  synchronized long add(EffectNames eln, Data1D data, Data4D region)
203 205
    {
204 206
    if( mMax[INDEX]>mNumEffects )
205 207
      {
206
      EffectNames.fillWithUnities(eln.ordinal(), mUniforms, NUM_UNIFORMS*mNumEffects);    
207
      mInterI[mNumEffects] = inter;
208
      mInterP[mNumEffects] = null;
209
      mBuf[4*mNumEffects  ] = point.getX();
210
      mBuf[4*mNumEffects+1] = point.getY();
208
      EffectNames.fillWithUnities(eln.ordinal(), mUniforms, NUM_UNIFORMS*mNumEffects);
211 209

  
212
      if( region==null )
210
      if( data instanceof Dynamic1D)
211
        mInterI[mNumEffects] = (Dynamic1D)data;
212
      else if( data instanceof Static1D )
213 213
        {
214
        mBuf[4*mNumEffects+2] = 1000*mObjHalfX;
215
        mBuf[4*mNumEffects+3] = 1000*mObjHalfY;
214
        mInterI[mNumEffects] = null;
215
        mUniforms[NUM_UNIFORMS*mNumEffects] = ((Static1D)data).getX();
216 216
        }
217
      else
218
        {
219
        float z = region.getZ();
220
        float w = region.getW();
217
      else return -1;
221 218

  
222
        mBuf[4*mNumEffects+2] = z<=0.0f ? 1000*mObjHalfX : z;
223
        mBuf[4*mNumEffects+3] = w<=0.0f ? 1000*mObjHalfY : w;
219
      if( region instanceof Dynamic4D)
220
        mInterP[mNumEffects] = (Dynamic4D)region;
221
      else if( region instanceof Static4D )
222
        {
223
        mInterP[mNumEffects]  = null;
224
        mBuf[4*mNumEffects  ] = ((Static4D)region).getX();
225
        mBuf[4*mNumEffects+1] = ((Static4D)region).getY();
226
        mBuf[4*mNumEffects+2] = ((Static4D)region).getZ();
227
        mBuf[4*mNumEffects+3] = ((Static4D)region).getW();
224 228
        }
229
      else return -1;
225 230

  
226 231
      return addBase(eln);
227 232
      }
......
230 235
    }
231 236
  
232 237
///////////////////////////////////////////////////////////////////////////////////////////////////
233
       
234
  synchronized long add(EffectNames eln, Dynamic1D inter, Static3D c, Static4D region, Dynamic2D point)
238
// chroma
239

  
240
  synchronized long add(EffectNames eln, Data1D level, Static3D color, Data4D region)
235 241
    {
236 242
    if( mMax[INDEX]>mNumEffects )
237 243
      {
238
      mInterI[mNumEffects] = inter;
239
      mInterP[mNumEffects] = point;
244
      EffectNames.fillWithUnities(eln.ordinal(), mUniforms, NUM_UNIFORMS*mNumEffects);
240 245

  
241
      if( region==null )
246
      if( level instanceof Dynamic1D)
247
        mInterI[mNumEffects] = (Dynamic1D)level;
248
      else if( level instanceof Static1D )
242 249
        {
243
        mBuf[4*mNumEffects+2] = 1000*mObjHalfX;
244
        mBuf[4*mNumEffects+3] = 1000*mObjHalfY;
250
        mInterI[mNumEffects] = null;
251
        mUniforms[NUM_UNIFORMS*mNumEffects] = ((Static1D)level).getX();
245 252
        }
246
      else
247
        {
248
        float z = region.getZ();
249
        float w = region.getW();
253
      else return -1;
250 254

  
251
        mBuf[4*mNumEffects+2] = z<=0.0f ? 1000*mObjHalfX : z;
252
        mBuf[4*mNumEffects+3] = w<=0.0f ? 1000*mObjHalfY : w;
255
      mUniforms[NUM_UNIFORMS*mNumEffects+1] = color.getX();
256
      mUniforms[NUM_UNIFORMS*mNumEffects+2] = color.getY();
257
      mUniforms[NUM_UNIFORMS*mNumEffects+3] = color.getZ();
258

  
259
      if( region instanceof Dynamic4D)
260
        mInterP[mNumEffects] = (Dynamic4D)region;
261
      else if( region instanceof Static4D )
262
        {
263
        mInterP[mNumEffects]  = null;
264
        mBuf[4*mNumEffects  ] = ((Static4D)region).getX();
265
        mBuf[4*mNumEffects+1] = ((Static4D)region).getY();
266
        mBuf[4*mNumEffects+2] = ((Static4D)region).getZ();
267
        mBuf[4*mNumEffects+3] = ((Static4D)region).getW();
253 268
        }
269
      else return -1;
254 270

  
255
      mUniforms[NUM_UNIFORMS*mNumEffects+1] = c.getX();
256
      mUniforms[NUM_UNIFORMS*mNumEffects+2] = c.getY();
257
      mUniforms[NUM_UNIFORMS*mNumEffects+3] = c.getZ();
258
     
259 271
      return addBase(eln); 
260 272
      }
261 273
      
......
263 275
    }
264 276
  
265 277
///////////////////////////////////////////////////////////////////////////////////////////////////
278
// chroma
266 279

  
267
  synchronized long add(EffectNames eln, Dynamic1D inter, Static3D c, Static4D region, Static2D point)
280
  synchronized long add(EffectNames eln, Data1D level, Static3D color)
268 281
    {
269 282
    if( mMax[INDEX]>mNumEffects )
270 283
      {
271
      mInterI[mNumEffects] = inter;
272
      mInterP[mNumEffects] = null;
273
      mBuf[4*mNumEffects  ] = point.getX();
274
      mBuf[4*mNumEffects+1] = point.getY();
284
      EffectNames.fillWithUnities(eln.ordinal(), mUniforms, NUM_UNIFORMS*mNumEffects);
275 285

  
276
      if( region==null )
286
      if( level instanceof Dynamic1D)
287
        mInterI[mNumEffects] = (Dynamic1D)level;
288
      else if( level instanceof Static1D )
277 289
        {
278
        mBuf[4*mNumEffects+2] = 1000*mObjHalfX;
279
        mBuf[4*mNumEffects+3] = 1000*mObjHalfY;
290
        mInterI[mNumEffects] = null;
291
        mUniforms[NUM_UNIFORMS*mNumEffects] = ((Static1D)level).getX();
280 292
        }
281
      else
282
        {
283
        float z = region.getZ();
284
        float w = region.getW();
293
      else return -1;
285 294

  
286
        mBuf[4*mNumEffects+2] = z<=0.0f ? 1000*mObjHalfX : z;
287
        mBuf[4*mNumEffects+3] = w<=0.0f ? 1000*mObjHalfY : w;
288
        }
295
      mUniforms[NUM_UNIFORMS*mNumEffects+1] = color.getX();
296
      mUniforms[NUM_UNIFORMS*mNumEffects+2] = color.getY();
297
      mUniforms[NUM_UNIFORMS*mNumEffects+3] = color.getZ();
298

  
299
      mInterP[mNumEffects]  = null;            //
300
      mBuf[4*mNumEffects+2] = 1000*mObjHalfX;  // i.e. null region
301
      mBuf[4*mNumEffects+3] = 1000*mObjHalfY;  //
289 302

  
290
      mUniforms[NUM_UNIFORMS*mNumEffects+1] = c.getX();
291
      mUniforms[NUM_UNIFORMS*mNumEffects+2] = c.getY();
292
      mUniforms[NUM_UNIFORMS*mNumEffects+3] = c.getZ();
293
   
294 303
      return addBase(eln);
295 304
      }
296 305
       
......
298 307
    }
299 308
  
300 309
///////////////////////////////////////////////////////////////////////////////////////////////////
301
       
302
  synchronized long add(EffectNames eln, float t, Static3D c, Static4D region, Dynamic2D point)
310
// chroma
311

  
312
  synchronized long add(EffectNames eln, Data4D chroma, Data4D region)
303 313
    {
304 314
    if( mMax[INDEX]>mNumEffects )
305 315
      {
306
      mInterI[mNumEffects] = null;
307
      mInterP[mNumEffects] = point;
316
      EffectNames.fillWithUnities(eln.ordinal(), mUniforms, NUM_UNIFORMS*mNumEffects);
308 317

  
309
      if( region==null )
318
      if( chroma instanceof Dynamic4D)
319
        mInterI[mNumEffects] = (Dynamic4D)chroma;
320
      else if( chroma instanceof Static4D )
310 321
        {
311
        mBuf[4*mNumEffects+2] = 1000*mObjHalfX;
312
        mBuf[4*mNumEffects+3] = 1000*mObjHalfY;
322
        mInterI[mNumEffects] = null;
323
        mUniforms[NUM_UNIFORMS*mNumEffects  ] = ((Static4D)chroma).getX();
324
        mUniforms[NUM_UNIFORMS*mNumEffects+1] = ((Static4D)chroma).getY();
325
        mUniforms[NUM_UNIFORMS*mNumEffects+2] = ((Static4D)chroma).getZ();
326
        mUniforms[NUM_UNIFORMS*mNumEffects+3] = ((Static4D)chroma).getW();
313 327
        }
314
      else
315
        {
316
        float z = region.getZ();
317
        float w = region.getW();
328
      else return -1;
318 329

  
319
        mBuf[4*mNumEffects+2] = z<=0.0f ? 1000*mObjHalfX : z;
320
        mBuf[4*mNumEffects+3] = w<=0.0f ? 1000*mObjHalfY : w;
330
      if( region instanceof Dynamic4D)
331
        mInterP[mNumEffects] = (Dynamic4D)region;
332
      else if( region instanceof Static4D )
333
        {
334
        mInterP[mNumEffects]  = null;
335
        mBuf[4*mNumEffects  ] = ((Static4D)region).getX();
336
        mBuf[4*mNumEffects+1] = ((Static4D)region).getY();
337
        mBuf[4*mNumEffects+2] = ((Static4D)region).getZ();
338
        mBuf[4*mNumEffects+3] = ((Static4D)region).getW();
321 339
        }
340
      else return -1;
322 341

  
323
      mUniforms[NUM_UNIFORMS*mNumEffects+0] = t;
324
      mUniforms[NUM_UNIFORMS*mNumEffects+1] = c.getX();
325
      mUniforms[NUM_UNIFORMS*mNumEffects+2] = c.getY();
326
      mUniforms[NUM_UNIFORMS*mNumEffects+3] = c.getZ();
327
     
328 342
      return addBase(eln); 
329 343
      }
330 344
      
......
332 346
    }
333 347
  
334 348
///////////////////////////////////////////////////////////////////////////////////////////////////
349
// chroma
335 350

  
336
  synchronized long add(EffectNames eln, float t, Static3D c, Static4D region, Static2D point)
351
  synchronized long add(EffectNames eln, Data4D chroma)
337 352
    {
338 353
    if( mMax[INDEX]>mNumEffects )
339 354
      {
340
      mInterI[mNumEffects] = null;
341
      mInterP[mNumEffects] = null;
342
      mBuf[4*mNumEffects  ] = point.getX();
343
      mBuf[4*mNumEffects+1] = point.getY();
355
      EffectNames.fillWithUnities(eln.ordinal(), mUniforms, NUM_UNIFORMS*mNumEffects);
344 356

  
345
      if( region==null )
357
      if( chroma instanceof Dynamic4D)
358
        mInterI[mNumEffects] = (Dynamic4D)chroma;
359
      else if( chroma instanceof Static4D )
346 360
        {
347
        mBuf[4*mNumEffects+2] = 1000*mObjHalfX;
348
        mBuf[4*mNumEffects+3] = 1000*mObjHalfY;
361
        mInterI[mNumEffects] = null;
362
        mUniforms[NUM_UNIFORMS*mNumEffects  ] = ((Static4D)chroma).getX();
363
        mUniforms[NUM_UNIFORMS*mNumEffects+1] = ((Static4D)chroma).getY();
364
        mUniforms[NUM_UNIFORMS*mNumEffects+2] = ((Static4D)chroma).getZ();
365
        mUniforms[NUM_UNIFORMS*mNumEffects+3] = ((Static4D)chroma).getW();
349 366
        }
350
      else
351
        {
352
        float z = region.getZ();
353
        float w = region.getW();
367
      else return -1;
354 368

  
355
        mBuf[4*mNumEffects+2] = z<=0.0f ? 1000*mObjHalfX : z;
356
        mBuf[4*mNumEffects+3] = w<=0.0f ? 1000*mObjHalfY : w;
357
        }
369
      mInterP[mNumEffects]  = null;            //
370
      mBuf[4*mNumEffects+2] = 1000*mObjHalfX;  // i.e. null region
371
      mBuf[4*mNumEffects+3] = 1000*mObjHalfY;  //
358 372

  
359
      mUniforms[NUM_UNIFORMS*mNumEffects+0] = t;
360
      mUniforms[NUM_UNIFORMS*mNumEffects+1] = c.getX();
361
      mUniforms[NUM_UNIFORMS*mNumEffects+2] = c.getY();
362
      mUniforms[NUM_UNIFORMS*mNumEffects+3] = c.getZ();
363
   
364 373
      return addBase(eln);
365 374
      }
366 375
      

Also available in: Unified diff