Project

General

Profile

« Previous | Next » 

Revision 02de77c9

Added by Leszek Koltunski over 7 years ago

Progress with multi-program rendering.

View differences:

src/main/java/org/distorted/library/EffectQueueMatrix.java
105 105
    }
106 106

  
107 107
///////////////////////////////////////////////////////////////////////////////////////////////////
108
// here construct the ModelView and the ModelViewProjection Matrices
108 109

  
109
  static void getUniforms(int mProgramH)
110
    {
111
    mObjDH     = GLES20.glGetUniformLocation(mProgramH, "u_objD");
112
    mDepthH    = GLES20.glGetUniformLocation(mProgramH, "u_Depth");
113
    mMVPMatrixH= GLES20.glGetUniformLocation(mProgramH, "u_MVPMatrix");
114
    mMVMatrixH = GLES20.glGetUniformLocation(mProgramH, "u_MVMatrix"); 
115
    }
116

  
117
///////////////////////////////////////////////////////////////////////////////////////////////////
118
  
119
  synchronized void compute(long currTime) 
120
    {
121
    if( currTime==mTime ) return;
122
    if( mTime==0 ) mTime = currTime;
123
    long step = (currTime-mTime);
124
   
125
    for(int i=0; i<mNumEffects; i++)
126
      {
127
      if( mInter[0][i]!=null && mInter[0][i].interpolateMain(mUniforms ,NUM_UNIFORMS*i, mCurrentDuration[i], step) )
128
        {
129
        for(int j=0; j<mNumListeners; j++)
130
          EffectMessageSender.newMessage( mListeners.elementAt(j),
131
                                          EffectMessage.EFFECT_FINISHED,
132
                                         (mID[i]<<EffectTypes.LENGTH)+EffectTypes.MATRIX.type,
133
                                          mName[i],
134
                                          mObjectID);
135

  
136
        if( EffectNames.isUnity(mName[i], mUniforms, NUM_UNIFORMS*i) )
137
          {
138
          remove(i);
139
          i--;
140
          continue;
141
          }
142
        else mInter[0][i] = null;
143
        }
144

  
145
      if( mInter[1][i]!=null )
146
        {
147
        mInter[1][i].interpolateMain(mUniforms, NUM_UNIFORMS*i+4, mCurrentDuration[i], step);
148
        }
149

  
150
      mCurrentDuration[i] += step;
151
      }
152
     
153
    mTime = currTime;  
154
    }  
155

  
156
///////////////////////////////////////////////////////////////////////////////////////////////////
157

  
158
  protected void moveEffect(int index)
159
    {
160
    mUniforms[NUM_UNIFORMS*index  ] = mUniforms[NUM_UNIFORMS*(index+1)  ];
161
    mUniforms[NUM_UNIFORMS*index+1] = mUniforms[NUM_UNIFORMS*(index+1)+1];
162
    mUniforms[NUM_UNIFORMS*index+2] = mUniforms[NUM_UNIFORMS*(index+1)+2];
163
    mUniforms[NUM_UNIFORMS*index+3] = mUniforms[NUM_UNIFORMS*(index+1)+3];
164
    mUniforms[NUM_UNIFORMS*index+4] = mUniforms[NUM_UNIFORMS*(index+1)+4];
165
    mUniforms[NUM_UNIFORMS*index+5] = mUniforms[NUM_UNIFORMS*(index+1)+5];
166
    mUniforms[NUM_UNIFORMS*index+6] = mUniforms[NUM_UNIFORMS*(index+1)+6];
167
    }
168

  
169
///////////////////////////////////////////////////////////////////////////////////////////////////
170
// here construct the ModelView Matrix
171

  
172
  synchronized void send(DistortedFramebuffer df, float halfX, float halfY, float halfZ)
110
  void constructMatrices(DistortedFramebuffer df, float halfX, float halfY)
173 111
    {
174 112
    Matrix.setIdentityM(mViewMatrix, 0);
175 113
    Matrix.translateM(mViewMatrix, 0, -df.mWidth/2, df.mHeight/2, -df.mDistance);
176
    
114

  
177 115
    float x,y,z, sx,sy,sz;
178
   
116

  
179 117
    for(int i=0; i<mNumEffects; i++)
180 118
      {
181 119
      if (mName[i] == EffectNames.ROTATE.ordinal() )
......
193 131
        x = mUniforms[NUM_UNIFORMS*i+4];
194 132
        y = mUniforms[NUM_UNIFORMS*i+5];
195 133
        z = mUniforms[NUM_UNIFORMS*i+6];
196
     	
134

  
197 135
        Matrix.translateM(mViewMatrix, 0, x,-y, z);
198 136
        multiplyByQuat(mViewMatrix, mUniforms[NUM_UNIFORMS*i], mUniforms[NUM_UNIFORMS*i+1], mUniforms[NUM_UNIFORMS*i+2], mUniforms[NUM_UNIFORMS*i+3]);
199 137
        Matrix.translateM(mViewMatrix, 0,-x, y,-z);
......
203 141
        sx = mUniforms[NUM_UNIFORMS*i  ];
204 142
        sy = mUniforms[NUM_UNIFORMS*i+1];
205 143
        sz = mUniforms[NUM_UNIFORMS*i+2];
206
        
144

  
207 145
        Matrix.translateM(mViewMatrix, 0, sx,-sy, sz);
208 146
        }
209 147
      else if(mName[i] == EffectNames.SCALE.ordinal() )
......
225 163
        z  = mUniforms[NUM_UNIFORMS*i+6];
226 164

  
227 165
        Matrix.translateM(mViewMatrix, 0, x,-y, z);
228
      
166

  
229 167
        mViewMatrix[4] += sx*mViewMatrix[0]; // Multiply viewMatrix by 1 x 0 0 , i.e. X-shear.
230 168
        mViewMatrix[5] += sx*mViewMatrix[1]; //                        0 1 0 0
231 169
        mViewMatrix[6] += sx*mViewMatrix[2]; //                        0 0 1 0
232 170
        mViewMatrix[7] += sx*mViewMatrix[3]; //                        0 0 0 1
233
      
171

  
234 172
        mViewMatrix[0] += sy*mViewMatrix[4]; // Multiply viewMatrix by 1 0 0 0 , i.e. Y-shear.
235 173
        mViewMatrix[1] += sy*mViewMatrix[5]; //                        y 1 0 0
236 174
        mViewMatrix[2] += sy*mViewMatrix[6]; //                        0 0 1 0
237 175
        mViewMatrix[3] += sy*mViewMatrix[7]; //                        0 0 0 1
238
      
176

  
239 177
        mViewMatrix[4] += sz*mViewMatrix[8]; // Multiply viewMatrix by 1 0 0 0 , i.e. Z-shear.
240 178
        mViewMatrix[5] += sz*mViewMatrix[9]; //                        0 1 0 0
241 179
        mViewMatrix[6] += sz*mViewMatrix[10];//                        0 z 1 0
......
244 182
        Matrix.translateM(mViewMatrix, 0,-x, y, -z);
245 183
        }
246 184
      }
247
   
185

  
248 186
    Matrix.translateM(mViewMatrix, 0, halfX,-halfY, 0);
249 187
    Matrix.multiplyMM(mMVPMatrix, 0, df.mProjectionMatrix, 0, mViewMatrix, 0);
250
    
188
    }
189

  
190
///////////////////////////////////////////////////////////////////////////////////////////////////
191

  
192
  static void getUniforms(int mProgramH)
193
    {
194
    mObjDH     = GLES20.glGetUniformLocation(mProgramH, "u_objD");
195
    mDepthH    = GLES20.glGetUniformLocation(mProgramH, "u_Depth");
196
    mMVPMatrixH= GLES20.glGetUniformLocation(mProgramH, "u_MVPMatrix");
197
    mMVMatrixH = GLES20.glGetUniformLocation(mProgramH, "u_MVMatrix"); 
198
    }
199

  
200
///////////////////////////////////////////////////////////////////////////////////////////////////
201

  
202
  float[] getMVP()
203
    {
204
    return mMVPMatrix;
205
    }
206

  
207
///////////////////////////////////////////////////////////////////////////////////////////////////
208

  
209
  synchronized void compute(long currTime) 
210
    {
211
    if( currTime==mTime ) return;
212
    if( mTime==0 ) mTime = currTime;
213
    long step = (currTime-mTime);
214
   
215
    for(int i=0; i<mNumEffects; i++)
216
      {
217
      if( mInter[0][i]!=null && mInter[0][i].interpolateMain(mUniforms ,NUM_UNIFORMS*i, mCurrentDuration[i], step) )
218
        {
219
        for(int j=0; j<mNumListeners; j++)
220
          EffectMessageSender.newMessage( mListeners.elementAt(j),
221
                                          EffectMessage.EFFECT_FINISHED,
222
                                         (mID[i]<<EffectTypes.LENGTH)+EffectTypes.MATRIX.type,
223
                                          mName[i],
224
                                          mObjectID);
225

  
226
        if( EffectNames.isUnity(mName[i], mUniforms, NUM_UNIFORMS*i) )
227
          {
228
          remove(i);
229
          i--;
230
          continue;
231
          }
232
        else mInter[0][i] = null;
233
        }
234

  
235
      if( mInter[1][i]!=null )
236
        {
237
        mInter[1][i].interpolateMain(mUniforms, NUM_UNIFORMS*i+4, mCurrentDuration[i], step);
238
        }
239

  
240
      mCurrentDuration[i] += step;
241
      }
242
     
243
    mTime = currTime;  
244
    }  
245

  
246
///////////////////////////////////////////////////////////////////////////////////////////////////
247

  
248
  protected void moveEffect(int index)
249
    {
250
    mUniforms[NUM_UNIFORMS*index  ] = mUniforms[NUM_UNIFORMS*(index+1)  ];
251
    mUniforms[NUM_UNIFORMS*index+1] = mUniforms[NUM_UNIFORMS*(index+1)+1];
252
    mUniforms[NUM_UNIFORMS*index+2] = mUniforms[NUM_UNIFORMS*(index+1)+2];
253
    mUniforms[NUM_UNIFORMS*index+3] = mUniforms[NUM_UNIFORMS*(index+1)+3];
254
    mUniforms[NUM_UNIFORMS*index+4] = mUniforms[NUM_UNIFORMS*(index+1)+4];
255
    mUniforms[NUM_UNIFORMS*index+5] = mUniforms[NUM_UNIFORMS*(index+1)+5];
256
    mUniforms[NUM_UNIFORMS*index+6] = mUniforms[NUM_UNIFORMS*(index+1)+6];
257
    }
258

  
259
///////////////////////////////////////////////////////////////////////////////////////////////////
260

  
261
  synchronized void send(DistortedFramebuffer df, float halfX, float halfY, float halfZ)
262
    {
263
    constructMatrices(df,halfX,halfY);
264

  
251 265
    GLES20.glUniform3f( mObjDH , halfX, halfY, halfZ);
252 266
    GLES20.glUniform1f( mDepthH, df.mDepth);
253 267
    GLES20.glUniformMatrix4fv(mMVMatrixH , 1, false, mViewMatrix, 0);

Also available in: Unified diff