Project

General

Profile

« Previous | Next » 

Revision 4fde55a0

Added by Leszek Koltunski over 7 years ago

Beginnings of the WAVE effect.

View differences:

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