Project

General

Profile

« Previous | Next » 

Revision 0a046359

Added by Leszek Koltunski over 7 years ago

The EffectQueues are now totally independent of the size of the underlying Bitmap.

View differences:

src/main/java/org/distorted/library/EffectQueueFragment.java
37 37
class EffectQueueFragment extends EffectQueue
38 38
  {
39 39
  private static final int NUM_UNIFORMS = 8;
40
  private static final int NUM_CACHE    = 4;
40 41
  private static final int INDEX = EffectTypes.FRAGMENT.ordinal();
41 42
  private static int mNumEffectsH;
42 43
  private static int mTypeH;
......
44 45
  
45 46
///////////////////////////////////////////////////////////////////////////////////////////////////
46 47
   
47
  EffectQueueFragment(DistortedObject obj)
48
  EffectQueueFragment(long id)
48 49
    { 
49
    super(obj,NUM_UNIFORMS,INDEX);
50
    super(id,NUM_UNIFORMS,NUM_CACHE,INDEX);
50 51
    }
51 52

  
52 53
///////////////////////////////////////////////////////////////////////////////////////////////////
......
87 88
        else mInter[0][i] = null;
88 89
        }
89 90

  
90
      if( mInter[1][i]!=null )
91
        {
92
        mInter[1][i].interpolateMain( mUniforms, NUM_UNIFORMS*i+4, mCurrentDuration[i], step);
93

  
94
        mUniforms[NUM_UNIFORMS*i+4] = mUniforms[NUM_UNIFORMS*i+4]-mObjHalfX;
95
        mUniforms[NUM_UNIFORMS*i+5] =-mUniforms[NUM_UNIFORMS*i+5]+mObjHalfY;
96
        }
97

  
98
      if( mInter[2][i]!=null ) mInter[2][i].interpolateMain(mUniforms, NUM_UNIFORMS*i+1, mCurrentDuration[i], step);
91
      if( mInter[1][i]!=null ) mInter[1][i].interpolateMain( mCache   , NUM_CACHE*i     , mCurrentDuration[i], step);
92
      if( mInter[2][i]!=null ) mInter[2][i].interpolateMain( mUniforms, NUM_UNIFORMS*i+1, mCurrentDuration[i], step);
99 93

  
100 94
      mCurrentDuration[i] += step;
101 95
      }
......
112 106
    mUniforms[NUM_UNIFORMS*index+2] = mUniforms[NUM_UNIFORMS*(index+1)+2];
113 107
    mUniforms[NUM_UNIFORMS*index+3] = mUniforms[NUM_UNIFORMS*(index+1)+3];
114 108

  
115
    if( mInter[1][index]==null )
116
      {
117
      mUniforms[NUM_UNIFORMS*index+4] = mUniforms[NUM_UNIFORMS*(index+1)+4];
118
      mUniforms[NUM_UNIFORMS*index+5] = mUniforms[NUM_UNIFORMS*(index+1)+5];
119
      mUniforms[NUM_UNIFORMS*index+6] = mUniforms[NUM_UNIFORMS*(index+1)+6];
120
      mUniforms[NUM_UNIFORMS*index+7] = mUniforms[NUM_UNIFORMS*(index+1)+7];
121
      }
109
    mCache[NUM_CACHE*index  ] = mCache[NUM_CACHE*(index+1)  ];
110
    mCache[NUM_CACHE*index+1] = mCache[NUM_CACHE*(index+1)+1];
111
    mCache[NUM_CACHE*index+2] = mCache[NUM_CACHE*(index+1)+2];
112
    mCache[NUM_CACHE*index+3] = mCache[NUM_CACHE*(index+1)+3];
122 113
    }
123 114
  
124 115
///////////////////////////////////////////////////////////////////////////////////////////////////
125 116
  
126
  synchronized void send() 
117
  synchronized void send(int halfX, int halfY)
127 118
    {
128 119
    GLES20.glUniform1i( mNumEffectsH, mNumEffects);
129
      
120

  
130 121
    if( mNumEffects>0 )
131
      {     
122
      {
123
      for(int i=0; i<mNumEffects; i++)
124
        {
125
        mUniforms[NUM_UNIFORMS*i+4] = mCache[NUM_CACHE*i  ]-halfX;
126
        mUniforms[NUM_UNIFORMS*i+5] =-mCache[NUM_CACHE*i+1]+halfY;
127
        mUniforms[NUM_UNIFORMS*i+6] = mCache[NUM_CACHE*i+2];
128
        mUniforms[NUM_UNIFORMS*i+7] = mCache[NUM_CACHE*i+3];
129
        }
130

  
132 131
      GLES20.glUniform1iv( mTypeH    ,  mNumEffects, mName    ,0);
133 132
      GLES20.glUniform4fv( mUniformsH,2*mNumEffects, mUniforms,0);
134 133
      }  
......
162 161
      else return -1;
163 162

  
164 163
      mInter[1][mNumEffects] = null;
165
      mUniforms[NUM_UNIFORMS*mNumEffects+6] = Float.MAX_VALUE;
166
      mUniforms[NUM_UNIFORMS*mNumEffects+7] = Float.MAX_VALUE;
164
      mCache[NUM_CACHE*mNumEffects+2] = Float.MAX_VALUE;
165
      mCache[NUM_CACHE*mNumEffects+3] = Float.MAX_VALUE;
167 166

  
168 167
      mInter[2][mNumEffects] = null;
169 168

  
......
200 199
      else if( region instanceof Static4D )
201 200
        {
202 201
        mInter[1][mNumEffects]  = null;
203
        mUniforms[NUM_UNIFORMS*mNumEffects+4] = ((Static4D)region).getX()-mObjHalfX;
204
        mUniforms[NUM_UNIFORMS*mNumEffects+5] =-((Static4D)region).getY()+mObjHalfY;
205
        mUniforms[NUM_UNIFORMS*mNumEffects+6] = ((Static4D)region).getZ();
206
        mUniforms[NUM_UNIFORMS*mNumEffects+7] = ((Static4D)region).getW();
202
        mCache[NUM_CACHE*mNumEffects  ] = ((Static4D)region).getX();
203
        mCache[NUM_CACHE*mNumEffects+1] = ((Static4D)region).getY();
204
        mCache[NUM_CACHE*mNumEffects+2] = ((Static4D)region).getZ();
205
        mCache[NUM_CACHE*mNumEffects+3] = ((Static4D)region).getW();
207 206
        }
208 207
      else return -1;
209 208

  
......
255 254
      else if( region instanceof Static4D )
256 255
        {
257 256
        mInter[1][mNumEffects]  = null;
258
        mUniforms[NUM_UNIFORMS*mNumEffects+4] = ((Static4D)region).getX()-mObjHalfX;
259
        mUniforms[NUM_UNIFORMS*mNumEffects+5] =-((Static4D)region).getY()+mObjHalfY;
260
        mUniforms[NUM_UNIFORMS*mNumEffects+6] = ((Static4D)region).getZ();
261
        mUniforms[NUM_UNIFORMS*mNumEffects+7] = ((Static4D)region).getW();
257
        mCache[NUM_CACHE*mNumEffects  ] = ((Static4D)region).getX();
258
        mCache[NUM_CACHE*mNumEffects+1] = ((Static4D)region).getY();
259
        mCache[NUM_CACHE*mNumEffects+2] = ((Static4D)region).getZ();
260
        mCache[NUM_CACHE*mNumEffects+3] = ((Static4D)region).getW();
262 261
        }
263 262
      else return -1;
264 263

  
......
302 301
      else return -1;
303 302

  
304 303
      mInter[1][mNumEffects]  = null;
305
      mUniforms[NUM_UNIFORMS*mNumEffects+6] = Float.MAX_VALUE;
306
      mUniforms[NUM_UNIFORMS*mNumEffects+7] = Float.MAX_VALUE;
304
      mCache[NUM_CACHE*mNumEffects+2] = Float.MAX_VALUE;
305
      mCache[NUM_CACHE*mNumEffects+3] = Float.MAX_VALUE;
307 306

  
308 307
      return addBase(eln);
309 308
      }

Also available in: Unified diff